Java-接口实践小实验

Java-接口实践小实验

  • 一直军队有好几种武器,有的武器能移动,有的武器能攻击。军队可以往武器库中一样一样添加武器,添加成功后,可下令武器一起移动,一起攻击。
//武器类
public class Weapon {
}
//攻击接口
public interface Attack {
    public void attack();
}
//移动接口
public interface Move {
    public void move();
}
//大炮子类,继承父类Weapao和接口Attack
public class DaPao extends Weapon implements Attack {
    @Override
    public void attack() {
        System.out.println("意大利炮开炮");
    }
}
//坦克子类继承父类Weapon和接口Move、Attack
public class Tank  extends Weapon implements Move,Attack{
    @Override
    public void attack() {
        System.out.println("坦克攻击");
    }

    @Override
    public void move() {
        System.out.println("坦克移动");

    }

    @Override
    public String toString() {
        return "Tank{}";
    }
}
//运输机子类继承父类Weapao和接口Move
public class YunShuJi extends Weapon implements Move {
    @Override
    public void move() {
        System.out.println("运输机运输物资");
    }
}
public class ArmTest {
    //军队的武器库数组
    private Weapon[] weapons;

//    public ArmTest(Weapon[] weapons) {
//        this.weapons = weapons;
//    }

		//武器库容量的有参构造
    public ArmTest(int count) {
         weapons = new Weapon[count];

    }
//军队添加武器入库,如何武器库已满,则抛出异常    
public void addWeapon(Weapon weapon) throws FullWeapons {
    for (int i = 0; i < weapons.length; i++) {
        if (weapons[i] == null) {
            weapons[i] = weapon;
            System.out.println(weapon+"已加载");
            //return很重要,如果写成break则程序运行出问题,可单步调试查看原因。
            return;
        }

    }
    throw new FullWeapons("武器库已满,无法添加新武器");

}
		//军队下来武器全体移动,如果武器是接口Move的子类,则强转为Move并调用move方法。
    public void moveAll(){
    for (int i = 0; i < weapons.length; i++) {
        if (weapons[i] instanceof Move){
            Move weapon = (Move) weapons[i];
            weapon.move();
        }
    }

}
//军队下来武器全体攻击,如果武器是接口Attack的子类,则强转为Attack并调用attack方法。
public void attackAll(){
    for (int i = 0; i < weapons.length; i++) {
        if (weapons[i] instanceof Attack){
            Attack weapon = (Attack) weapons[i];
            weapon.attack();
        }
    }
}
    public static void main(String[] args) {

//        Weapon[] weapon =  new  Weapon[4];
				//军队武器库容量的有参构造
        ArmTest armTest = new ArmTest(4);

        Weapon daPao = new DaPao();
        Weapon tank = new Tank();
        Weapon yunShuJi = new YunShuJi();
        Weapon yunShuJi1 = new YunShuJi();
        //武器库已满异常的捕获
        try {
            armTest.addWeapon(daPao);
            armTest.addWeapon(tank);
            armTest.addWeapon(yunShuJi);
            armTest.addWeapon(yunShuJi1);
            armTest.addWeapon(yunShuJi);
        }catch (FullWeapons fullWeapons){
//            System.out.println(fullWeapons.getMessage());
            System.out.println(fullWeapons);
        }
        armTest.attackAll();
        armTest.moveAll();
    }
}
//武器库已满异常类
public class FullWeapons extends Exception{
    public FullWeapons() {
    }

    public FullWeapons(String message) {
        super(message);
    }
}
posted @ 2021-11-22 21:27  ye椰子zi  阅读(89)  评论(0)    收藏  举报