【Java】継承に継承を重ねオーバーライドする
継承を重ねることができることは知ってるけどどうやって書くの?
オーバーライドってよくわからない!
と思ったので、継承を理解していく為に記録しておきます。
継承に継承を重ねる
public class Main { public static void main(String[] args) { UltraHero ul = new UltraHero(); ul.attack(); //UktraHeroのattackを実行 SuperHero sh = new SuperHero(); sh.attack(); //SuperHeroのattackを実行 Hero h = new Hero(); h.attack(); //Heroのattackを実行 } } public class Hero { public void attack() { System.out.println("攻撃力は10"); } } public class SuperHero extends Hero { public void attack() { System.out.println("攻撃力は20"); } } public class UltraHero extends SuperHero { public void attack() { System.out.println("攻撃力は30"); } }
プログラムを実行すると
それぞれのattackメソッドが実行されます
>攻撃力は30 >攻撃力は20 >攻撃力は10
オーバーライドしてみる
コマンドライン引数を使い入力した数字によって
実行結果が変わるようにします。
Mainクラスでは継承末端の孫であるUltraHeroクラスを呼び出します。
public class Main { public static void main(String[] args) { UltraHero ul = new UltraHero(); ul.attack(args); } } public class Hero {//親 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 10) { System.out.println("攻撃力は10"); } else { System.out.println("攻撃できません"); } } } public class SuperHero extends Hero {//子 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 20) { System.out.println("攻撃力は20"); } else { super.attack(args); } } } public class UltraHero extends SuperHero {//孫 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 30) { System.out.println("攻撃力は30"); } else { super.attack(args); } } }
コマンドライン引数に30を入力します
>攻撃力は30
コマンドライン引数に20を入力します
>攻撃力は20
SuperHeroクラスのattackメソッドが実行されています
コマンドライン引数に0を入力します
>攻撃できません
Heroクラスのattackメソッドが実行されています
あとがき
継承を少しかじることができました。
インターフェースは、まだ理解できていないのでこれから勉強していこうと思います。