java多态抽象类实例

编写一个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();
	}
	
}

  

原文地址:https://www.cnblogs.com/liubing2018/p/8448485.html