zoukankan      html  css  js  c++  java
  • 抽象类应用--模板设计(理解)

    简述

    例如,现在有三类事物:
    机器人:充电,工作;
    人:吃饭、工作、睡觉
    猪:吃饭、睡觉
    要求可以实现以上的操作控制,即可以控制人、机器人、猪的操作行为(吃、睡觉、工作)

    定义一个行为类

    abstract class Action {
    	public static final int EAT = 1;
    	public static final int SLEEP = 5;
    	public static final int WORK = 7;
    	public void command(int flag){
    		// switch只支持数值判断,if支持条件判断
    		switch(flag){
    			case EAT:
    				this.eat();
    				break;
    			case SLEEP:
    				this.sleep();
    				break;
    			case WORK:
    				this.work();
    				break;
    			case EAT + SLEEP:
    				this.eat();
    				this.sleep();
    				break;
    		}
    	}
    	// 因为现在不确定子类的实现是什么样的
    	public abstract void eat();
    	public abstract void sleep();
    	public abstract void work();
    
    }
    

    定义机器人的类

    class Rebot extends Action{
    	public void eat(){
    		System.out.println("机器人下在补充能量");
    	}
    	public void work(){
    		System.out.println("机器人下在努力工作");
    	}
    	public void sleep() {}
    }
    

    定义人这个类

    class Human extends Action{
    	public void eat(){
    		System.out.println("人正在吃饭");
    	}
    	public void sleep(){
    		System.out.println("人正在睡觉");
    	}
    	public void work(){
    		System.out.println("人正在为梦想努力奋斗");
    	}
    }
    

    定义猪这个类

    class Pig extends Action{
    	public void eat(){
    		System.out.println("猪正在吃饲料");
    	}
    	public void sleep(){
    		System.out.println("猪下在长肉");
    	}
    	public void work(){}
    }
    

    调用测试

    public class testDemo{
    	public static void main(String args[]){
    		func(new Rebot());
    		func(new Human());
    		func(new Pig());
    	}
    	public static void func(Action act){
    		act.command(Action.EAT);	
    		act.command(Action.SLEEP);	
    		act.command(Action.WORK);	
    	}
    }
    

    总结

    1.如果真的要使用类继承,那么就使用抽象类(20%的情况)
    2.抽象类强制规定了子类必须要做的事情,而且可以与抽象类的普通方法想配合
    3.不管抽象类如何努力都有一个天生最大的问题:单继承局限

  • 相关阅读:
    md测试
    安利好用的小工具及软件(常更新)
    08-无人值守自动批量安装系统(下)
    建立本地yum仓库
    如何知道命令是由哪个服务提供的
    08-无人值守自动批量安装系统(上)
    07-软件管理
    06-时间管理
    05-用户和组以及权限
    04-编辑文本
  • 原文地址:https://www.cnblogs.com/anyux/p/11962656.html
Copyright © 2011-2022 走看看