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