トピック:
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()方法;
}
}
}