1、题目:
- 写一个Army类,代表一支军队
- 这个类有一个属性,Weapon[ ] w 数组,用来存储该军队所有武器
- Army类提供一个构造方法,构造方法里面通过传递一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组 w
- Army类提供一个addWeapon(Weapon wa)方法,表示把参数wa 所代表的武器加入到数组w中
- 在这个类中还定义两个方法attrackAll()让w 数组中的所有武器攻击
- 以及moevAll( ) 让w 数组中的所有可移动的武器移动
- 写一个主方法进行测试
提示:
Weapon是一个父类,应该有很多子武器,这些子武器应该有一些是可以移动的,有一些是可以攻击的
代码演示:
创建武器类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:49* @Copyright 公司* 武器类*/
public class Weapon {}
创建移动的接口和射击的接口
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:45* @Copyright 公司* 可移动的接口*/
public interface Moveable {/*** 可移动的行为*/public void move();
}
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:47* @Copyright 公司*/
public interface Shootable {/*** 射击行为*/public void shoot();
}
创建大炮类
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:52* @Copyright 公司* 大炮,不可移动,可射击*/
public class DaPao extends Weapon implements Shootable{@Overridepublic void shoot() {System.out.println("大炮射击");}
}
创建飞机类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:54* @Copyright 公司* 战斗机,可移动,可开炮*/
public class Fighter extends Weapon implements Moveable,Shootable{@Overridepublic void move() {System.out.println("飞机起飞");}@Overridepublic void shoot() {System.out.println("飞机射击");}
}
创建坦克类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:49* @Copyright 公司* 坦克,可移动可射击*/
public class Tank extends Weapon implements Moveable,Shootable{@Overridepublic void move() {System.out.println("坦克移动");}@Overridepublic void shoot() {System.out.println("坦克射击");}
}
创建物资飞机类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:55* @Copyright 公司* 物资飞机,可移动不可射击*/
public class WuZiFly extends Weapon implements Moveable{@Overridepublic void move() {System.out.println("物资飞机起飞");}
}
创建异常类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 21:22* @Copyright 公司*/
public class WeaponIndexOutOfBoundException extends Exception{public WeaponIndexOutOfBoundException() {}public WeaponIndexOutOfBoundException(String message) {super(message);}
}
创建武器类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 20:57* @Copyright 公司* 军队*/
public class Army {/*** 武器数组*/private Weapon[] w;/*** 创建军队的方法* @param count 武器数量*/public Army(int count) {//动态初始化数组Weapon[] w=new Weapon[count];this.w = w;}/*** 将武器加入数组* @param weapon*/public void addWeapon(Weapon weapon) throws WeaponIndexOutOfBoundException {for (int i = 0; i <w.length; i++) {if(null==w[i]){w[i]=weapon;System.out.println(weapon+"武器添加成功");return;}}// 程序如果执行到此处说明,武器没有添加成功throw new WeaponIndexOutOfBoundException("武器数量已经超过武器数组长度");}/*** 所有可攻击的武器攻击*/public void attackAll(){//其实就是遍历数组for (int i = 0; i <w.length; i++) {if (w[i] instanceof Shootable){//调用子类中特有的方法,向下转型//类在转成某个接口的时候,不需要有继承关系Shootable shootable=(Shootable) w[i];shootable.shoot();}}}/*** 所有可移动的武器移动*/public void moveAll(){for (int i = 0; i <w.length; i++) {if (w[i] instanceof Moveable){//调用子类中特有的方法,向下转型//类在强制 类型转换的过程中,如果是类转换成接口类型,不需要有继承关系Moveable moveable= (Moveable) w[i];moveable.move();}}}}
创建测试类:
package com.lbj.javase.array.homework;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array.homework* @date 2021/3/26 22:36* @Copyright 公司*/
public class Test {public static void main(String[] args) {//创建一个军队Army army=new Army(4);//创建武器DaPao daPao=new DaPao();DaPao daPao2=new DaPao();Fighter fighter=new Fighter();Tank tank=new Tank();WuZiFly wuZiFly=new WuZiFly();//军队中加入武器try {army.addWeapon(daPao);army.addWeapon(fighter);army.addWeapon(tank);army.addWeapon(wuZiFly);army.addWeapon(daPao2);} catch (WeaponIndexOutOfBoundException e) {System.out.println(e.getMessage());}//让所有可移动的移动army.moveAll();//让所有可射击的射击army.attackAll();}}
结果:
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=3649:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\test01-2021-1-20\out\production\test01-2021-1-20;C:\Users\14811\.m2\repository\junit\junit\3.8.2\junit-3.8.2.jar" com.lbj.javase.array.homework.Test
com.lbj.javase.array.homework.DaPao@1540e19d武器添加成功
com.lbj.javase.array.homework.Fighter@677327b6武器添加成功
com.lbj.javase.array.homework.Tank@14ae5a5武器添加成功
com.lbj.javase.array.homework.WuZiFly@7f31245a武器添加成功
武器数量已经超过武器数组长度
飞机起飞
坦克移动
物资飞机起飞
大炮射击
飞机射击
坦克射击
Process finished with exit code 0