>> Java入門トップに戻る

final修飾子

Javaのfinal修飾子について説明します。

final修飾子はクラスやメソッド、変数(フィールド)に付けることができる修飾子で、以下の様な効果があります。

クラスにつけた場合: そのクラスは継承不可になる。
メソッドにつけた場合: そのメソッドはオーバーライド不可になる。
変数(フィールド)につけた場合: その変数は「定数」になり、初期値の代入が必須で値の変更が不可になる。

変数と書いたのはローカル変数にも付けることが出来るからです。

では、実際にコードを見てみましょう。
package test5;

public class FinalTest {


	public static void main(String[] args) {
		
		Child obj = new Child();
		//値の変更不可
		obj.value=100;
		

	}

	
}
//クラスの継承不可
class Child_Child extends Child{
	int num=0;
}

final class Child extends Parent{
	
	//オーバーライド不可
	@Override
	public void echoHello(){
		System.out.println("ハロー");
	}
	
}
class Parent{
	
	public final int value=10;
	
	public final void echoHello(){
		System.out.println("Hello");
	}
}
このコードはfinal修飾子の動作を確かめるものなので、エラーが発生します。

まず一番したのParentクラスでフィールドvalueとメソッドechoHelloにfinal修飾子をつけています。
フィールドvalueはfinalを付けると初期値の代入が必須になるので、10を代入しています。

このParentクラスを継承したChildクラス内でメソッドechoHelloをオーバーライドしようとしていますが、ここでエラーが発生します。
10行目でフィールドvalueの値を変更しようとしていますが、finalが付いてるので値の変更が出来ず、エラーが発生します。

また、18行目でfinal修飾子がついたChildクラスを継承しようとしていますが、finalが付いてると継承できないのでここでエラーが発生します。

このようにfinal修飾子を使うと、継承やオーバーライド、値の変更等を出来なくすることが出来ます。
定数を作る時によく使いますので、覚えておくと良いです。


>> 【内部クラス】に進む
>> Java入門トップに戻る