オーバーライドを活用する
Hero.java
public class Hero {
String name = "勇者";
int hp = 100;
//逃げる
public void run() {
System.out.println(this.name + "は逃げ出した!");
}
}
SuperHeroクラスにrun()を再定義する
SuperHero.java
public class SuperHero extends Hero{
boolean flying;
//撤退する
public void run() { //Heroクラスにも定義してあるが、再定義(上書き)できる
System.out.println(this.name + "撤退した!");
}
}
HeroとSuperHeroのrun()を呼び出す
Main.java
public class Main {
public static void main(String[] args) {
Hero h = new Hero();
h.run();
SuperHero sh = new SuperHero();
sh.run();
}
}
実行結果
勇者は逃げ出した!
勇者は撤退した!
継承の禁止
Stringクラスと宣言時にfinalがついてるクラスは継承できない
Main.java
public class Main extends String{
Stringクラス禁止は、javaのAPIリファレンスでも確認できる
Main.java
public final class Main {
オーバーライドの禁止
宣言時にfinalが付けられたメソッドは、子クラスでオーバーライドできない
Hero.java
public class Hero {
String name = "勇者";
int hp = 100;
//逃げる
public final void run() { //run()はオーバーライドできない
System.out.println(this.name + "は逃げ出した!");
}
}
public final void run()
先ほどの、SuperHeroクラスのrun()メソッドは無効になる