HOME > final修飾子
final修飾子
英単語"final"には「最後の」とか「最終の」といった意味がありますが、final修飾子はまさにそんな感じの動作を与える修飾子です。
final修飾子は、クラス、メソッド、変数に指定することができ、それぞれ以下のような意味になります。
【final修飾子の動き】
[クラスに付けた場合]:そのクラスは継承不可となる
[メソッドに付けた場合]:そのメソッドはオーバーライド不可となる
[変数に付けた場合]:その変数は変更不可(定数)となる
サンプルソース
例)final修飾子をクラスに指定した場合
- SampleClass1.java
-
final public class SampleClass1 { //finalはpublicの前後どちらでもOKです。 public void hoge1(){ System.out.println("TEST"); } }
- SampleClass2.java
-
public class SampleClass2 extends SampleClass1{ //エラーになります。 public void hoge2(){ System.out.println("TEST"); } }
SampleClass2はfinal指定されたクラスを継承しているため例外が発生します。
例)final修飾子をメソッドに指定した場合
- SampleClass1.java
-
public class SampleClass1 { //final指定したメソッド final public void hoge(){ //finalはpublicの前後どちらでもOKです。 System.out.println("TEST"); } }
- SampleClass2.java
-
public class SampleClass2 extends SampleClass1{ //オーバーライド public void hoge(){ //エラーになります。 System.out.println("TEST"); } }
hogeメソッドは final指定されているため、オーバーライドできずエラーとなります。
例)final修飾子を変数に指定した場合
- SampleClass.java
-
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」を指定をすると、グローバルな定数にすることができます。