メンバ変数にfinalを付けると、
定数化する事はfinal – 変数の固定機能で説明しましたが、
メンバ関数やクラスにもfinalを付ける事ができます。
メンバ関数にfinalを付けた場合
メンバ関数にfinalキーワードを付けると、
そのメンバ関数がオーバーライド不可になります。
/********** 基本クラス **********/
class kihon {
public final void show() {
System.out.println("基本クラス");
}
}
/********** 派生クラス **********/
class hasei extends kihon {
public void show() {
System.out.println("派生クラス");
}
}
このプログラム例では、
基本クラスのメンバ関数showにfinalが付いているので、
その派生クラスでメンバ関数showのオーバーライドはできません。
なので、このプログラムはエラーとなり、実行できません。
クラスにfinalを付けた場合
クラスにfinalキーワードを付けると、
そのクラスは継承できないクラスになります。
/********** 基本クラス **********/
final class kihon {
public int data1;
}
/********** 派生クラス **********/
class hasei extends kihon {
public int data2;
}
このプログラム例では、
基本クラスにfinalが付いているので、
その派生クラスは定義できません。
なので、このプログラムはエラーとなり、実行できません。
派生クラスを定義できないので、
自動的にメンバ関数はfinal付きとして処理されます。
一方、クラスにfinalが付いていても
メンバ変数は自動的にfinalが付かないので注意して下さい。