多態 抽象 綜合

<span style="font-size:18px;">public class SoldierDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Officer officer = new Officer("賀景洲");
		officer.callToAttack();//所有
		System.out.print("***************");
		officer.callToAttack(officer.getSoldiers()[0]);
	}

}
/**
 * 軍人類
 * @author Hejingzhou
 *
 */
abstract class Soldier
{
	private String name;
	/**
	 * 構造方法重寫名字屬性
	 * @param name
	 */
	public Soldier(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	
	public void action(){ 
		start();
		attack();
		end();
	}
	public void start(){
		System.out.println("開始作戰");
	}
	public abstract void attack();//抽象方法//作戰
	public void end(){
		System.out.println("作戰結束");
	}
}
//創建一個陸軍繼承軍人
class LandSoldier extends Soldier{
	public LandSoldier(String name){
		super(name);
	}
	/**
	 * 攻擊方法  實現抽象類中的抽象方法
	 */
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println(getName()+"使用步槍射擊");
		
	}
}
//創建一個海軍繼承軍人
class OceanSoldier extends Soldier{
	public OceanSoldier(String name){
		super(name);
	}
	/**
	 * 攻擊方法  實現抽象類中的抽象方法
	 */
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println(getName()+"使用魚雷射擊");
		
	}
}
//創建一個軍官
class Officer extends Soldier{ 
	private Soldier[] soldier = new Soldier[2];//軍官持有兩個大兵
	public Officer(String name){
		super(name);
		soldier[0] = new LandSoldier("張三");
		soldier[1] = new OceanSoldier("李四");
	} 
	public Soldier[] getSoldiers(){
		return soldier;
	}
	public void attack() {
		// TODO Auto-generated method stub
		System.out.println(getName()+"使用手槍射擊");
	}
	//特有的發號施令   所有士兵都發送攻擊 包括自己
	public void callToAttack(){
		for(int i=0;i<soldier.length;i++){
			soldier[i].action();
		}
		this.action();//自己也攻擊
	}
	//讓一個士兵攻擊
	public void callToAttack(Soldier soldier){
		soldier.action();
	}
}</span>




開始作戰
張三使用步槍射擊
作戰結束
開始作戰
李四使用魚雷射擊
作戰結束
開始作戰
賀景洲使用手槍射擊
作戰結束
***************開始作戰
張三使用步槍射擊
作戰結束

發佈了56 篇原創文章 · 獲贊 26 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章