JAVA:继承+接口+多态

写一个程序来模拟组建一支部队。
首先定义两个接口,一个Attack(可攻击的)接口,包含一个方法fire(),表示射击;一个Mobile(可移动的)接口,包含一个方法move(),表示前进。      

public interface Attack {
    public void fire();

}
public interface Mobile {
    public void move();
}

      
然后定义一个抽象类Soldier代表士兵,实现Mobile接口,由于士兵不同前进方式不同,所以此处不实现move方法。                

public abstract class Soldier implements Mobile{
    String name;

    public Soldier(String name) {
        this.name = name;
    }

    public Soldier() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


再写Soldier的三个子类:步兵Foot、救护兵Aidman和指挥官Commander,分别给出move()方法的不同实现,三个子类的move方法分别输出:“步兵跑步前进”,“救护兵坐救护车前进”,“指挥官骑马前进”。Foot类还实现了Attack接口,在fire()方法中输出“步兵开枪射击”。                

public class Foot extends Soldier implements Attack{
    public Foot(String name) {
        super(name);
    }

    public Foot() {
    }

    @Override
    public void move() {
        System.out.println(this.name+"跑步前进");
    }

    @Override
    public void fire() {
        System.out.println(this.name+"开枪射击");
    }
}
public class Aidman extends Soldier{

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

    public Aidman() {
    }

    @Override
    public void move() {
        System.out.println(this.name+"坐救护车前进");
    }
}
public class Commander extends Soldier{
    public Commander(String name) {
        super(name);
    }

    public Commander() {
    }

    @Override
    public void move() {
        System.out.println(this.name+"骑马前进");
    }
}


最后写一个类Army,表示一支军队,这个类有两个属性:一个整型的number,表示军队人数;一个Soldier类型数组s,用来存放士兵对象。该类还提供一个方法addSoldiers(Soldier soldier),   表示把一个士兵对象加入到数组s中,当超过军队人数则不能再加入了。在这个类中还定义两个方法moveAll()让s数组中所有的士兵前进;以及attackAll()让s数组中的所有可以进攻的士兵进攻。 

public class Army {
    private int number;
    private Soldier [] s ;
    private int cout=0;
    public void addSoldiers(Soldier soldier){
       if(cout>=this.number){
            System.out.println("超过军队人数,不能再加入了");
        }
       else{
           s[cout++]=soldier;
       }
    }

    public void moveAll(){
        for(int i=0;i<s.length;i++){
            s[i].move();
        }
    }
    public void attackAll(){
        for(int i=0;i<s.length;i++){
            if(s[i] instanceof Foot){
                Foot f = (Foot) s[i];
                f.fire();
            }
        }
    }

    public Army(int number) {
        this.number = number;
        s = new Soldier[number];
    }

    public Army() {
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public Soldier[] getS() {
        return s;
    }

    public void setS(Soldier[] s) {
        this.s = s;
    }
}


写一个主类,在主方法中生成几个士兵对象,加入到军队中。然后分别调用attackAll和moveAll方法。                

public class TestArmy {
    public static void main(String[] args) {
        Soldier []s = new Soldier[4];
        s[0]= new Foot("步兵1");
        s[1] = new Foot("步兵2");
        s[2] = new Aidman("救护兵");
        s[3] =new Commander("指挥官");
        Army a1 =new Army(3);

        for(int i=0;i<s.length;i++){
            a1.addSoldiers(s[i]);
        }
        a1.moveAll();
        a1.attackAll();

    }
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值