<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>
开始作战
张三使用步枪射击
作战结束
开始作战
李四使用鱼雷射击
作战结束
开始作战
贺景洲使用手枪射击
作战结束
***************开始作战
张三使用步枪射击
作战结束