編寫一個Soldier類,描述具有普遍行為和屬性的一個士兵物件。
編寫陸軍士兵、海軍士兵、軍官類來擴充套件Soldier類。
設計Soldier類的相關屬性和方法。
建模幾個陸軍士兵、海軍士兵、軍官類來繼承Soldier類,增加各自特有的屬性和方法並重寫相應的方法。
public class SoldierDemo { public static void main(String[] args) { // TODO Auto-generated method stub Leader leader = new Leader("leader"); leader.CallToAttack();//全體進攻 System.out.println("*****************************"); leader.CallToAttack(leader.getSoldiers()[0]);//只讓一個士兵進攻 System.out.println("*****************************"); leader.CallToAttack(leader);//只讓指揮官進攻 } } abstract class Soldier{ private String name; public Soldier(String name) { this.name = name; } public String getName() { return name; } public void ready() { System.out.println("準備作戰"); } public void end() { System.out.println("戰鬥結束"); } abstract void attack(); public void action() {//行動模板 ready(); attack(); end(); } } class LandSoldier extends Soldier{ public LandSoldier(String name) { super(name); } public void attack() { System.out.println("陸軍士兵"+getName()+"開始攻擊"); } } class OceanSoldier extends Soldier{ public OceanSoldier(String name) { super(name); } public void attack() { System.out.println("海軍士兵"+getName()+"開始攻擊"); } } class Leader extends Soldier{ private Soldier[] soldiers = new Soldier[2];//指揮官持有兩個士兵 public Leader(String name) { super(name); soldiers[0] = new LandSoldier("張三"); soldiers[1] = new OceanSoldier("李四"); } public Soldier[] getSoldiers() { //外界可以呼叫這兩個士兵 return soldiers; } public void attack() { System.out.println("指揮官"+getName()+"開始攻擊"); } //全體士兵進攻 public void CallToAttack() { for(int i = 0;i<soldiers.length;i++) { soldiers[i].action(); } this.action(); } //只讓一個士兵進攻 public void CallToAttack(Soldier soldier) { soldier.action(); } }