<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>
開始作戰
張三使用步槍射擊
作戰結束
開始作戰
李四使用魚雷射擊
作戰結束
開始作戰
賀景洲使用手槍射擊
作戰結束
***************開始作戰
張三使用步槍射擊
作戰結束