Java练习题:继承多态和接口_士兵作战程序
  TEZNKK3IfmPf 12天前 30 0

1、题目

使用多态实现士兵作战程序:编写一个Soldier类,描述具有普遍行为和属性的一个士兵对象。编写陆军士兵、海军士兵、军官类来扩展Soldier类。提示如下:

  1. 编写一个Soldier类。设计Soldier类的相关通用属性和方法,包括名字属性,攻击准备,攻击和攻击完成三个方法。其中攻击方法由子类具体实现,再增加一个模板方法action调用攻击准备,攻击和攻击完成三个方法;
  2. 编写陆军士兵 ArmySoldier、海军士兵 NavySoldier、军官类 Officer 来继承 Soldier 类,增加各自的特有属性和方法,并重写父类的攻击方法;
  3. 军官类增加新的方法allAction实现可以指挥团队(所有士兵和自己)一起行动,增加新的方法singleAction实现指挥某一个士兵单独行动;
  4. 编写一个SoldierTest类,创建军官,陆军士兵和海军士兵对象,调用军官类的方法指挥单个士兵和团队作战。

执行结果如下:

*** 单个陆军士兵作战 ***

攻击准备...

陆军士兵 魏大勇 使用步枪射击

攻击完成...

攻击准备...

陆军士兵 张大彪 使用步枪射击

攻击完成...

*** 单个海军士兵作战 ***

攻击准备...

海军士兵 田海洋 使用鱼雷攻击

攻击完成...

*** 所有士兵和军官一起作战 ***

攻击准备...

陆军士兵 魏大勇 使用步枪射击

攻击完成...

攻击准备...

陆军士兵 张大彪 使用步枪射击

攻击完成...

攻击准备...

海军士兵 田海洋 使用鱼雷攻击

攻击完成...

攻击准备...

军官 李云龙 使用手枪射击

攻击完成...

2、代码

1)士兵类

// 士兵类
public class Soldier {

    private String name;

    public Soldier(String name) {
         = name;
    }

    public String getName() {
        return name;
    }

    // 攻击准备方法
    public void attack_ready() {
        System.out.println("攻击准备...");
    }

    // 攻击方法
    public void attack() {
        System.out.println("攻击...");
    }

    // 攻击完成
    public void attack_finish() {
        System.out.println("攻击完成...");
    }

    // 模板方法
    public void action() {
        this.attack_ready();
        this.attack();
        this.attack_finish();
    }
}

2)陆军士兵类

// 陆军士兵类
public class ArmySoldier extends Soldier {

    public ArmySoldier(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.printf("陆军士兵 %s 使用步枪射击", getName());
        System.out.println();
    }
}

3)海军士兵类

// 海军士兵类
public class NavySoldier extends Soldier {

    public NavySoldier(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.printf("海军士兵 %s 使用鱼雷射击", getName());
        System.out.println();
    }
}

4)军官类

// 军官类
public class Officer extends Soldier {

    public Officer(String name) {
        super(name);
    }

    @Override
    public void attack() {
        System.out.printf("军官 %s 使用手枪射击", getName());
        System.out.println();
    }

    // 指挥团队(所有士兵和自己)一起行动
    public void allAction(Soldier[] ss) {
        for (int i = 0; i < ss.length; i++) {
            ss[i].action();
        }
    }

    // 指挥某一个士兵单独行动
    public void singleAction(Soldier s) {
        s.action();
    }
}

5)测试

public class SoldierTest {

    public static void main(String[] args) {
        Officer officer = new Officer("李云龙"); // 军官
        ArmySoldier armySoldier1 = new ArmySoldier("魏大勇"); // 陆军士兵1
        ArmySoldier armySoldier2 = new ArmySoldier("张大彪"); // 陆军士兵2
        NavySoldier navySoldier = new NavySoldier("田海洋"); // 海军士兵

        System.out.println("*** 单个陆军士兵作战 ***");
        officer.singleAction(armySoldier1);
        officer.singleAction(armySoldier2);
        System.out.println("*** 单个海军士兵作战 ***");
        officer.singleAction(navySoldier);
        System.out.println("*** 所有士兵和军官一起作战 ***");
        Soldier[] ss = {armySoldier1,armySoldier2,navySoldier,officer};
        officer.allAction(ss);
    }
}

3、运行测试结果

*** 单个陆军士兵作战 ***
攻击准备...
陆军士兵 魏大勇 使用步枪射击
攻击完成...
攻击准备...
陆军士兵 张大彪 使用步枪射击
攻击完成...
*** 单个海军士兵作战 ***
攻击准备...
海军士兵 田海洋 使用鱼雷射击
攻击完成...
*** 所有士兵和军官一起作战 ***
攻击准备...
陆军士兵 魏大勇 使用步枪射击
攻击完成...
攻击准备...
陆军士兵 张大彪 使用步枪射击
攻击完成...
攻击准备...
海军士兵 田海洋 使用鱼雷射击
攻击完成...
攻击准备...
军官 李云龙 使用手枪射击
攻击完成...

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 12天前 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   12天前   26   0   0 java
TEZNKK3IfmPf