zoukankan      html  css  js  c++  java
  • 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();
    	}
    	
    }
    

      

  • 相关阅读:
    memcached 常用命令最全总结大全
    windows下,java环境变量的设置,设置点击startup.bat启动tomcat
    初步认识消息中间件
    构建自己的Java并发模型框架
    初步理解socket
    Intel Realsense D435 在ROS:Kinetic + Ubuntu16.04中安装使用
    0% [Connecting to security.ubuntu.com (2001:67c:1560:8001::14)]
    realsense D435安装时出现Invoking "cmake" failed,not found ddynamic_reconfigure etc.
    [Halcon] 算子学习_Calibration_Calibration Object
    [Halcon] 使用Halcon生成圆点型标定板
  • 原文地址:https://www.cnblogs.com/liubing2018/p/8448485.html
Copyright © 2011-2022 走看看