Java -- 継承・オーバーライド
継承
新しく拡張したクラスが既存のクラスのメンバを受け継ぐこと
オーバーライド
サブクラスで新しくメソッドを記述するときは、スーパークラスと同じメソッド、引数の数、型をもつメソッドを定義することが出来る。
サブクラスのメソッドが、スーパークラスのメソッドに代わって機能することです。
オーバーライドの例
class A { void calc(int i) { int x = i * 10; } } class B extends A { void calc(int i) { int x = i * 10; System.out.println(x); } }
1. スーパークラスAで引数に指定された数を10倍にするメソッドcalcを作成。
2. サブクラスBでスーパークラスAで作成したcalcメソッドをオーバーライドし、結 果を表示する機能を追加します。
スーパークラスと同じ名前のメンバを使う
サブクラス内でsuper.をつけてメソッドやフィールドを呼び出すと、スーパークラスのメソッドやフィールドを呼び出すことが出来ます。
class A { int x; //スーパークラスAに変数xを宣言 .... } class B extends A { int x; //サブクラスBにも変数xを宣言 .... public void disp() { x = 10; //サブクラスBのフィールド変数xに10を代入 super.x = 20; //スーパークラスAのフィールド変数xに20を代入 } }
finalをつける
サブクラスによってオーバーライドされたくないメソッドにはメソッドの先頭にfinalをつけると、オーバーライドされないようにすることが出来ます。
class A { public final void A() { ..... } }
サブクラス自体を拡張してほしくない場合にはクラスの先頭にfinalをつけておくこともできます。
final class A { ..... }
フィールドの値を変更されたくない場合には、finalをフィールドの先頭につけておきます。
class A { static final int NUM = 4; }
この場合は宣言したときには必ず初期化しなければなりません。