問題
OnitaijiPolymoクラスを抽象クラスとして継承したクラスPeachBoy, Dog, Monkey, Kijiを作り、fightメソッドをオーバーライドしてください。Mainクラスではポリモーフィズムを用いて、各クラスのfightメソッドを呼び出してください。
抽象クラス
package p_polymo;
//修飾子の後にabstractで定義
public abstract class OnitaijiPolymo {
public abstract void fight();
}
子クラス
package p_polymo;
public class PeachBoy extends OnitaijiPolymo {
private String name = "桃太郎";
@Override
public void fight() {
System.out.println(this.name + "は刀で戦った!");
}
}
子クラス
package p_polymo;
public class Dog extends OnitaijiPolymo {
private String name = "犬";
@Override
public void fight() {
System.out.println(this.name + "はかみついた!");
}
}
子クラス
package p_polymo;
public class Monkey extends OnitaijiPolymo {
private String name = "猿";
@Override
public void fight() {
System.out.println(this.name + "はひっかいた!");
}
}
子クラス
package p_polymo;
public class Kiji extends OnitaijiPolymo {
private String name = "キジ";
@Override
public void fight() {
System.out.println(this.name + "はつついた!");
}
}
メインクラス
package p_polymo;
public class Main {
public static void main(String[] args) {
OnitaijiPolymo[] onitaiji = new OnitaijiPolymo[4];
onitaiji[0] = new PeachBoy();
onitaiji[1] = new Dog();
onitaiji[2] = new Monkey();
onitaiji[3] = new Kiji();
for(OnitaijiPolymo oni : onitaiji) {
oni.fight();
}
}
}
//演算結果
//桃太郎は刀で戦った!
//犬はかみついた!
//猿はひっかいた!
//キジはつついた!
補足
- abstractで抽象クラスを定義
- 抽象クラスには必ず一つ以上の抽象メソッドを定義しなければならない。
- 抽象メソッドには処理を記載しない。(インスタンス化できないので)
- static、privateは抽象メソッドで定義不可
- 多態性(ポリモーフィズム)は以下の手順で行う
1 、子クラスでスーパークラス(ここでは抽象クラス)と同名のメソッドをオーバーライド
2 、子クラスのインスタンスをスーパークラス型の変数で管理
3 、各インスタンスをループ処理で呼び出し