编写一个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[i].action();
}
this.action();
}
//只让一个士兵进攻
public void CallToAttack(Soldier soldier) {
soldier.action();
}
}