题目:
2.模拟一个军队作战场景,军队里面有各种兵种,如骑兵、步兵、炮兵等,每种兵都能攻击敌人,但攻击敌人的具体方式不一样。建立这3种兵种类,每种3个对象。然后建立一个军官对象,军官也会上场去攻击敌人,但是军官还有一种行,就是发号令,军官发号令了,所有的兵,不论什么兵种都去战场攻击敌人。程序运行效果就是一个军官开始发号令,然后所有的土兵包括军官都去攻击敌人,并显示每个人攻击敌人的方式。
分析:
代码实现
主函数测试类
package exer2;
public class ArmyOperationsTest {
public static void main(String[] args) {
Soldier[] soldiers = new Soldier[10];
for (int i = 0; i < 3; i++) {
soldiers[i]= new Cavalryman(i+1);
soldiers[i+3]= new Infantry(i+1);
soldiers[i+6]= new Artillery(i+1);
}
soldiers[9]= new Officer();
Officer officer=(Officer) soldiers[9];
officer.Signal(soldiers);
}
}
抽象士兵类
package exer2;
public abstract class Soldier {
Soldier[] soldiers = new Soldier[10];
protected int ID;
public Soldier() {
}
public Soldier(int ID) {
this.ID = ID;
}
abstract void attack();
}
发号令接口类
package exer2;
public interface SendSignals {
void Signal(Soldier[] soldier);
}
骑兵类
package exer2;
public class Cavalryman extends Soldier{
public Cavalryman(int id) {
super(id);
}
@Override
void attack() {
System.out.println("第"+ID+"个骑兵骑马挥舞大刀攻击敌人");
}
}
步兵类
package exer2;
public class Infantry extends Soldier{
public Infantry(int ID) {
super(ID);
}
@Override
void attack() {
System.out.println("第"+ID+"个步兵端起枪打击敌人");
}
}
炮兵类
package exer2;
public class Artillery extends Soldier{
public Artillery(int ID) {
super(ID);
}
@Override
void attack() {
System.out.println("第"+ID+"个炮兵开炮攻击敌人");
}
}
军官类
package exer2;
public class Officer extends Soldier implements SendSignals {
@Override
void attack() {
System.out.println("军官开始开始攻击敌人");
}
@Override
public void Signal(Soldier[] soldier) {
for (int i = 0; i < soldier.length; i++) {
soldier[i].attack();//调用各个对象的attack()方法;
}
}
}