Javaの最終キーワードは、ユーザーが不要なコードを実行したり、コードや値が変更されたりするのを防ぐための修飾子です。

このキーワードは3つのコンテキストで使用できます。彼らです:

  1. 可変修飾語としての最終キーワード

  2. メソッド修飾子としての最終キーワード

  3. クラス修飾子としての最終キーワード

それぞれの文脈には、独自の意味と制限があります。それらについては以下で詳しく説明します。

1.可変修飾語としてのFINALキーワード

それぞれのコンテキストにはそれぞれ異なる目的があります。 `final`は変数と一緒に使用されるとき、特に、コード中のどこかの値を変更することをユーザが制限するためのものです。 `final`変数は、いったん初期化されると、その値を変更することはできません。


final`変数が宣言されただけで初期化されていない場合、

final`変数に一度コードに値を代入することができます。 `final`変数の値が何度も変更されると、コンパイルエラーが発生します。

たとえば、コンパイルしようとすると、以下のコードでコンパイル時エラーが発生します。

FinalVariableExample.java

package com.techfou;
public class FinalVariableExample {

    final int count = 0;

    public FinalVariableExample() {
        count++;//The final field FinalVariableExample.count cannot be assigned
    }

}

出力

Output: Compile Time error

2.メソッド修飾子としてのFINALキーワード


final`はメソッドとともに使用されるとき、継承するクラスがメソッド定義をオーバーライドするのを制限します。たとえば、次の例では、 `FinalMethodChild`クラスが

final`メソッド `testCode()`をオーバーライドしようとしているため、コンパイル時エラーが発生します。

FinalMethodParent.java

package com.techfou;

public class FinalMethodParent {

    final void testCode(){
        System.out.println("This is a final method");
    }

}

class FinalMethodChild extends FinalMethodParent{

   //Cannot override the final method from FinalMethodParent
    void testCode(){
        System.out.println("This is overriding method");
    }

}

出力

Output: Compile Time error

3.クラス修飾子としてのFINALキーワード

`final`は、修飾子としてクラスに使用されるときに、そのクラスが他のクラスによって拡張または継承されるのを制限します。たとえば、以下のコードをコンパイルしようとすると、 `FinalClassParent`クラスがさらに拡張できない最終クラスであるため、コンパイル時エラーが発生します。

FinalClassParent.java

package com.mkyong;

public final class FinalClassParent {

    final void testCode(){
        System.out.println("This is a final method");
    }

}
//The type FinalClassChild cannot subclass the final class FinalClassParent
class FinalClassChild extends FinalClassParent{

    void testCode(){
        System.out.println("This is overriding method");
    }

}

出力

Output: Compile Time error