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();
    	}
    	
    }
    

      

  • 相关阅读:
    3、Nginx负载均衡实现的策略
    2、Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?
    1、HTTP 的负载均衡?Nginx负载均衡
    用 Python 手写十大经典排序算法
    处理TypeError: testFunc() missing 1 required positional argument: 'self' -- 没有实例化对象的错误
    Socket技术详解
    MAC终端常用命令
    接口自动化测试框架 -- reudom
    如何在Pypi发布上传你自己的Python库
    Docker数据目录迁移解决方案
  • 原文地址:https://www.cnblogs.com/liubing2018/p/8448485.html
Copyright © 2011-2022 走看看