定义一个抽象类Weapon(java),用接口来实现。

用接口实现: 
(1)、定义一个接口IAssaultable(可攻击的),该接口有一个抽象方法attack()。
(2)、定义一个接口IMobile(可移动的),该接口有一个抽象方法move()。
(3)、定义一个抽象类Weapon,实现IAssaultable接口和IMobile接口,但并没有给出具体的实现方法。
(4)、定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon类中的抽象方法。
(5)、写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);
该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapo wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。

(6)、写一个主方法去测试以上程序。

=====================================================================================================

直接附代码:

新建IAssaultable接口:

package com.qikai.Day08WeaponInterFace;

public interface IAssaultable {
	void attack();
}

新建IMobile 接口:

package com.qikai.Day08WeaponInterFace;

public interface IMobile {
	void move();
}

接着建Weapon类:继承上面两个接口;

package com.qikai.Day08WeaponInterFace;
//定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move()
//这两个方法分别表示武器的攻击方式和移动方式。

public abstract class Weapon implements IAssaultable,IMobile {

	public abstract void attack();  // 武器攻击方式
	public abstract void move();    // 武器移动方式
}

分别建坦克,飞机,军舰 ,和军队类;坦克,飞机,军舰分别继承Weapon类;

package com.qikai.Day08WeaponInterFace;

public class Tank extends Weapon {

	@Override
	public void attack() {
		System.out.println("坦克!开炮!");
	}

	@Override
	public void move() {
		System.out.println("坦克 撤退!");
		
	}

}
package com.qikai.Day08WeaponInterFace;

public class Flighter extends Weapon {

	@Override
	public void attack() {
		System.out.println("飞机!射击!");
	}

	@Override
	public void move() {
		System.out.println("飞机 撤退!");
	}

}


package com.qikai.Day08WeaponInterFace;

public class Warship extends Weapon  {

	@Override
	public void attack() {
		System.out.println("军舰!发射!");
	}

	@Override
	public void move() {
		System.out.println("军舰 撤退!");
	}

}

军队类:

package com.qikai.Day08WeaponInterFace;

public class Army {
	private Weapon[] w;
	
	public Army() {
	
	}	
	public Army(int num) {
		this.w = new Weapon[num];
	}
	// 定义 添加武器方法 
	public void addWeapon(Weapon wa){
		boolean Full=true;   // 创建 boolean变量 Full 判断武器库是否满
		for (int i = 0; i < w.length; i++) {
			// 如果没满;
			if (w[i]==null) {
				w[i]=wa;
				Full=false;  // 没满结束循环;
				break;
			}
		}
		    // 如果满了,输出 武器库满了!
		if (Full) {
			System.out.println("武器库已满...");
		}
	}
	//  定义 所有武器攻击 方法;
	//  使用 数组的遍历 ,如果当前位置存放的有武器,攻击!
	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.qikai.Day08WeaponInterFace;

public class Test {
	public static void main(String[] args) {
		Weapon w1=new Tank();
		Weapon w2=new Flighter();
		Weapon w3=new Warship();
		
		Army army=new Army(3); // Army的构造方法 :通过输入一个数字来确定数组的长度
		army.addWeapon(w1);
		army.addWeapon(w2);    // 调用 Army中的方法 给数组赋值 w1是坦克 ,w2 是飞机, w3是军舰
		army.addWeapon(w3);
		
		army.attackAll();    
		army.moveAll();

		army.addWeapon(w1);    // 继续添加 提示 武器库 满了 ...
	}
}






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值