MENU

【Java】継承に継承を重ねオーバーライドする

f:id:kiserukun:20210611090227p:plain

継承を重ねることができることは知ってるけどどうやって書くの?
オーバーライドってよくわからない!

と思ったので、継承を理解していく為に記録しておきます。

継承に継承を重ねる

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メソッドが実行されています

あとがき

継承を少しかじることができました。
インターフェースは、まだ理解できていないのでこれから勉強していこうと思います。