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);
}
}