编写一个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(); } }