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{
@Override
public 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{
@Override
public void move() {
System.out.println("飞机起飞");
}
@Override
public 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{
@Override
public void move() {
System.out.println("坦克移动");
}
@Override
public 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{
@Override
public 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