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

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM