多態性と配列の組み合わせ
配列を組み合わせていないコード
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(); //同じ指示を繰り返す
}
}
}
実行結果
スライムは逃げ出した
ゴブリンは逃げ出した
地獄コウモリは逃げ出した
呼び出す側 逃げろ 逃げろ 逃げろ
呼び出される側 スライムは逃げ出した ゴブリンは逃げ出した 地獄コウモリは逃げ出した