オーバーライドとは
親クラスにあるメンバを子クラスで上書きすること
サンプルプログラム(親クラス)
public class Hero {
String name = "ミナト";
int hp = 100;
//戦う
public void attack(Matango m) {
System.out.println(this.name + "の攻撃");
m.hp -= 5;
System.out.println("5ポイントのダメージを与えた!");
}
//逃げる
public void run() {
System.out.println(this.name + "は逃げ出した!");
}
}
オーバライド
親クラスで定義されているrun()「逃げ出した」を、子クラスで「撤退した」に書き直したい場合、子クラスで再度run()を定義すればよい。
Javaではオーバライドするメソッドには @Override
アノテーションを付けます。
サンプルプログラム(子クラス)
public class SuperHero extends Hero {
@Override
public void run() {
System.out.println(this.name + "は撤退した");
}
}
オーバーライドの説明
上記のプログラムにおいてHeroクラスですでに定義されているメンバrun()をSuperHeroクラスでも定義している。
これにより、形式上run()を上書きできるのである。
継承やオーバーライドの禁止
クラス宣言にfinalをつけると継承を禁止でき、メソッド宣言にfinalをつけるとオーバーライドを禁止できる。
親インスタンス部へのアクセス
親インスタンス部分のメソッドやフィールドに子インスタンスからアクセスするには
super.フィールド名
super.メソッド名
のように書く。