Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのfinalキーワードとは?変数・メソッド・クラスでの使い方を解説

finalは、Javaにおける非アクセス修飾子のひとつです。クラス、メソッド、変数の実装を「確定」させるために使用され、これらが後から変更されることを防ぐ役割を持ちます。本記事では、finalキーワードの基本的な概念と、変数・メソッド・クラスそれぞれでの使い方をコード例とともに解説します。

final変数

final変数は、明示的に初期化できるのは一度だけです。また、finalで宣言された参照変数は、別のオブジェクトを参照するように再代入することはできません。

ただし、オブジェクト内部のデータ自体は変更可能です。つまり、オブジェクトの「状態」は変えられるものの、「参照先」は変えられないという点に注意が必要です。

変数においてfinal修飾子は、staticと組み合わせて定数(クラス変数)を定義するためによく使われます。

コード例

public class Test {
    final int value = 10;
    // 定数宣言の例:
    public static final int BOXWIDTH = 6;
    static final String TITLE = "Manager";
    public void changeValue() {
        value = 12; // コンパイルエラーになる
    }
}

finalメソッド

finalメソッドは、サブクラスによってオーバーライドすることができません。final修飾子を付けることで、メソッドがサブクラスで書き換えられるのを防ぎます。

メソッドをfinalにする主な目的は、そのメソッドの内容が外部(継承先のクラス)によって勝手に変更されないようにすることです。この仕組みは、クラスの設計意図を守り、予期しない動作の変更を防ぐために重要です。

コード例

クラス宣言の中で、次のようにfinal修飾子を使ってメソッドを宣言します。

public class Test {
    public final void changeName() {
        // メソッドの本体
    }
}

finalクラス

クラスをfinalとして宣言する主な目的は、そのクラスが継承されるのを防ぐことです。クラスにfinalが付けられている場合、どのクラスもそのfinalクラスから機能を継承することはできません。

身近な例としては、Java標準ライブラリのStringクラスが挙げられます。Stringはfinalクラスとして設計されており、文字列の不変性とセキュリティを保証しています。

コード例

public final class Test {
    // クラスの本体
}

まとめ

finalキーワードは、対象に応じて以下のような効果を持ちます。

  • final変数: 一度代入すると値(または参照先)を変更できない
  • finalメソッド: サブクラスによるオーバーライドを禁止できる
  • finalクラス: 継承を禁止し、クラスの設計を保護できる

適切にfinalを活用することで、コードの安全性・可読性・保守性を高めることができます。特に定数の定義や、変更されては困る重要なロジックの保護に役立つので、ぜひ日々の開発で活用してみてください。

  1. Javaのfinal変数とは?使い方と定数宣言の基本を解説

    Javaにおけるfinal変数は、明示的な初期化を一度しか行えない変数です。一度値を代入すると、その後は再代入することができません。 また、参照型変数にfinalを付けた場合、その参照先のオブジェクトを別のオブジェクトに変更することはできません。ただし、オブジェクト内部のデータ(フィールドの値など)は変更可能です。つまり、オブジェクトの状態は変更できるが、参照自体は変更できないという点に注意が必要です。 final修飾子とstaticの組み合わせ 変数に対してfinal修飾子を使用する場合、多くの場面でstaticキーワードと組み合わせて使われます。これにより、定数がクラス変数(クラス全体で共

  2. Javaのsuperキーワードとは?使い方とサンプルコードを徹底解説

    JavaのsuperキーワードとはJavaにおけるsuperキーワードは、サブクラスから直接の親クラス(スーパークラス)のメンバーやコンストラクタへアクセスするために使われる重要なキーワードです。主な役割は以下の3つです。親クラスのインスタンス参照:super変数は、直近の親クラスのインスタンスを参照します。親クラスのメソッド呼び出し:superを使うことで、オーバーライドされた親クラスのメソッドを呼び出せます。親クラスのコンストラクタ呼び出し:super()は親クラスのコンストラクタとして機能し、子クラスのコンストラクタ内では必ず最初の行に記述する必要があります。特に、オーバーライドされたメ