HOME > final修飾子

final修飾子

英単語"final"には「最後の」とか「最終の」といった意味がありますが、final修飾子はまさにそんな感じの動作を与える修飾子です。

final修飾子は、クラス、メソッド、変数に指定することができ、それぞれ以下のような意味になります。

【final修飾子の動き】
 [クラスに付けた場合]:そのクラスは継承不可となる
 [メソッドに付けた場合]:そのメソッドはオーバーライド不可となる
 [変数に付けた場合]:その変数は変更不可(定数)となる

サンプルソース

final修飾子をクラスに指定した場合

 finalを指定したクラスのサンプル

final public class SampleClass1 {    //finalはpublicの前後どちらでもOKです。

    public void hoge1(){
        System.out.println("TEST");
    }
}


public class SampleClass2 extends SampleClass1{ //エラーになります。 public void hoge2(){ System.out.println("TEST"); } }

※SampleClass1はfinal指定されているため、SampleClass2は継承できずエラーとなります。



final修飾子をメソッドに指定した場合

 finalを指定したメソッドのサンプル

public class SampleClass1 {

    //final指定したメソッド
    final public void hoge(){    //finalはpublicの前後どちらでもOKです。
        System.out.println("TEST");
    }
}


public class SampleClass2 extends SampleClass1{ //オーバーライド public void hoge(){ //エラーになります。 System.out.println("TEST"); } }

※hogeメソッドはfinal指定されているため、オーバーライドできずエラーとなります。



final修飾子を変数に指定した場合

 finalを指定したメンバ変数のサンプル

public class SampleClass {

    //メンバ変数
    final public String str1 = "test";  //final指定したら初期値の指定は必須
    //final public String str2;           ←初期値を指定しないとエラーです

    //メソッド
    public void hoge(){

        final String str3 = "てすと";  //ローカル変数にも指定可能

        str1 = "TEST";  //final指定した変数に値の代入は不可。
        str3 = "TEST";  //final指定した変数に値の代入は不可。

    }
}

※メンバ変数に「public static final」指定をすると、グローバルな定数にすることができます。

Java基本カテゴリ