抽象類的練習題
這兩個方法分別表示武器的攻擊方式和移動方式。
(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);}
}