抽象类的练习题

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

}

猜你喜欢

转载自blog.csdn.net/qq_34668848/article/details/80599814