0
0

More than 3 years have passed since last update.

java(多態性のメリット)

Posted at

多態性と配列の組み合わせ

配列を組み合わせていないコード

public class Main {
  public static void main(String[] args) {
    Hero h1 = new Hero();
    Hero h2 = new Hero();
    Thief t1 = new Thief();
    Wizard w1 = new Wizard();
    Wizard w2 = new Wizard();
    //冒険開始!
    //まず宿屋に泊まる
    h1.hp += 50;
    h2.hp += 50;
    t1.hp += 50;
    w1.hp += 50;
    w2.hp += 50;
  }
}

配列を組み合わせたコード

public class Main {
  public static void main(String[] args) {
    Character[] c = new Character[5];
    c[0] = new Hero(); 
    c[1] = new Hero(); 
    c[2] = new Thief(); 
    c[3] = new Wizard(); 
    c[4] = new Wizard(); 
    //宿屋に泊まる
    for (Character ch : c) {      //1名ずつ順に取り出し
      ch.hp += 50;                //HPを50回復
    }
  }
}

引数との組み合わせ

public class Hero extends Character{
  public void attack(Monster m) {               //モンスターなら全部攻撃
    System.out.println(this.name + "の攻撃!");
    System.out.println("敵に10ポイントのダメージ");
    m.hp -= 10;
  }
}

モンスタークラスを継承していれば全てに攻撃する

同じ指示で異なる動作をさせる

public class Main {
  public static void main(String[] args) {
    Monster[] monsters = new Monster[3];
    monsters[0] = new Slime();
    monsters[1] = new Goblin();
    monsters[2] = new DeathBat();
    for (Monster m : monsters) {
      m.run();                    //同じ指示を繰り返す
    }
  }
}

実行結果
スライムは逃げ出した
ゴブリンは逃げ出した
地獄コウモリは逃げ出した

呼び出す側   逃げろ        逃げろ        逃げろ
呼び出される側 スライムは逃げ出した ゴブリンは逃げ出した 地獄コウモリは逃げ出した

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0