>> Java入門トップに戻る
Javaのfinal修飾子について説明します。
final修飾子はクラスやメソッド、変数(フィールド)に付けることができる修飾子で、以下の様な効果があります。
クラスにつけた場合: そのクラスは継承不可になる。
メソッドにつけた場合: そのメソッドはオーバーライド不可になる。
変数(フィールド)につけた場合: その変数は「定数」になり、初期値の代入が必須で値の変更が不可になる。
変数と書いたのはローカル変数にも付けることが出来るからです。
では、実際にコードを見てみましょう。
まず一番したのParentクラスでフィールドvalueとメソッドechoHelloにfinal修飾子をつけています。
フィールドvalueはfinalを付けると初期値の代入が必須になるので、10を代入しています。
このParentクラスを継承したChildクラス内でメソッドechoHelloをオーバーライドしようとしていますが、ここでエラーが発生します。
10行目でフィールドvalueの値を変更しようとしていますが、finalが付いてるので値の変更が出来ず、エラーが発生します。
また、18行目でfinal修飾子がついたChildクラスを継承しようとしていますが、finalが付いてると継承できないのでここでエラーが発生します。
このように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入門トップに戻る