java抽象类练习题3
(1)、定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move():
这两个方法分别表示武器的攻击方式和移动方式。
(2)、定义3个类:Tank,Flighter,WarShip都继承自Weapon,
分别用不同的方式实现Weapon类中的抽象方法。
(3)、写一个类Army,代表一支军队,这个类有一个属性
是Weapon数组w(用来存储该军队所拥有的所有武器);
该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大
武器数量,并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。
(4)、写一个主方法去测试以上程序。
---------------------------------------------------------------------------------------------------------------------------------
在这个循环体中,重要的是加入break跳出循环结构 ,不然只会输出一个武器类
public void addWeapon(Weapon wa) {
// 表示把参数wa所代表的武器加入到数组w中
for (int i = 0; i < w.length; i++) {
if(w[i] == null){
w[i] = wa;
//添加上break跳出循环
/*我要用坦克攻击
我要用坦克攻击
我要用坦克攻击
快跑,有敌人
快跑,有敌人
快跑,有敌人*/
break;
}
}
----------------------------------------------------------------------------------------------------------------------------------
package com.gem.demo01;
//抽象Weapon类
public abstract class Weapon {
// 抽象方法attack()
public abstract void attack();
//抽象方法move()
public abstract void move();
}
//Tank类
package com.gem.demo01;
public class Tank extends Weapon{
//重写weapon中的方法
public void attack(){
System.out.println("我要用坦克攻击");
}
public void move(){
System.out.println("快跑,有敌人");
}
}
//Flighter类
package com.gem.demo01;
public class Flighter extends Weapon{
@Override
public void attack() {
// TODO Auto-generated method stub
System.out.println("我是飞行员,我要攻击了 ");
}
@Override
public void move() {
// TODO Auto-generated method stub
System.out.println("快驾驭你的歼20,快速移动");
}
}
//WarShip类
package com.gem.demo01;
public class WarShip extends Weapon{
//重写weapon中的抽象方法
public void attack(){
System.out.println("我是辽宁舰的舰长,听我指挥");
}
public void move(){
System.out.println("跑跑跑");
}
}
//类Army,代表一支军队,这个类有一个属性
package com.gem.demo01;
public class Army {
public Army() {
}
// 定义私有数组
private Weapon[] w;
// 初始化军队数组
public Army(int num) {
// 控制数组大小
this.w = new Weapon[num];
// 初始化数组
for (int i = 0; i < num; i++) {
w[i] = null;
}
}
public void addWeapon(Weapon wa) {
// 表示把参数wa所代表的武器加入到数组w中
for (int i = 0; i < w.length; i++) {
if(w[i] == null){
w[i] = wa;
//添加上break跳出循环
/*我要用坦克攻击
我要用坦克攻击
我要用坦克攻击
快跑,有敌人
快跑,有敌人
快跑,有敌人*/
break;
}
}
}
// 把所有的攻击类都加入攻击方法中
// 使用 数组的遍历 ,如果当前位置存放的有武器,攻击
public void attackAll() {
for (int i = 0; i < w.length; i++) {
if(w[i] != null){
w[i].attack();
}
}
}
// 把所有的移动类都加入到移动方法中
// 使用 数组的遍历 ,如果当前位置存放的有武器,移动
public void moveAll() {
for (int i = 0; i < w.length; i++) {
if(w[i] != null){
w[i].move();
}
}
}
}
//测试类
package com.gem.demo01;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//利用多太来调用武器攻击方法
Weapon w1=new Tank();
Weapon w2=new Flighter();
Weapon w3=new WarShip();
//给数组定义大小
Army army=new Army(3);
//添加武器
army.addWeapon(w1);
army.addWeapon(w2);
army.addWeapon(w3);
army.attackAll();
army.moveAll();
army.addWeapon(w1);
}
}
以上是 java抽象类练习题3 的全部内容, 来源链接: utcz.com/z/389562.html