java抽象类练习题_java抽象类练习题3

本文通过Java编程展示了如何创建一个抽象类Weapon,包含attack()和move()两个抽象方法,以及其子类Tank、Flighter、WarShip的实现。接着,定义了一个Army类,用于存储和管理各种武器,包括添加武器、全部武器攻击和移动的方法。在测试类中,创建了不同类型的武器,并加入到军队中进行操作演示。
摘要由CSDN通过智能技术生成

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值