java多型抽象類例項

biubiubiuo發表於2018-02-14

編寫一個Soldier類,描述具有普遍行為和屬性的一個士兵物件。

編寫陸軍士兵、海軍士兵、軍官類來擴充套件Soldier類。

設計Soldier類的相關屬性和方法。

建模幾個陸軍士兵、海軍士兵、軍官類來繼承Soldier類,增加各自特有的屬性和方法並重寫相應的方法。

public class SoldierDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Leader leader = new Leader("leader");
		leader.CallToAttack();//全體進攻
		System.out.println("*****************************");
		leader.CallToAttack(leader.getSoldiers()[0]);//只讓一個士兵進攻
		System.out.println("*****************************");
		leader.CallToAttack(leader);//只讓指揮官進攻
	}

}

abstract class Soldier{
	private String name;
	public Soldier(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void ready() {
		System.out.println("準備作戰");
	}
	
	public void end() {
		System.out.println("戰鬥結束");
	}
	
	abstract void attack();
	
	public void action() {//行動模板
		ready();
		attack();
		end();
	}
}

class LandSoldier extends Soldier{
	
	public LandSoldier(String name) {
		super(name);
	}
	
	public void attack() {
		System.out.println("陸軍士兵"+getName()+"開始攻擊");
	}
}

class OceanSoldier extends Soldier{
	
	public OceanSoldier(String name) {
		super(name);
	}
	
	public void attack() {
		System.out.println("海軍士兵"+getName()+"開始攻擊");
	}
}

class Leader extends Soldier{
	
	private Soldier[] soldiers = new Soldier[2];//指揮官持有兩個士兵
	
	public Leader(String name) {
		super(name);
		soldiers[0] = new LandSoldier("張三");
		soldiers[1] = new OceanSoldier("李四");
	}
	
	public Soldier[] getSoldiers() {   //外界可以呼叫這兩個士兵
		return soldiers;
	}
	
	public void attack() {
		System.out.println("指揮官"+getName()+"開始攻擊");
	}
	
	//全體士兵進攻
	public void CallToAttack() {
		for(int i = 0;i<soldiers.length;i++) {
			soldiers[i].action();
		}
		this.action();
	}
	
	//只讓一個士兵進攻
	public void CallToAttack(Soldier soldier) {
		soldier.action();
	}
	
}

  

相關文章