package 抽象类_模板设计模式; public class Test { public static void main(String[] args) { Person p=new Person(); Robbt r=new Robbt(); Pig pig=new Pig(); p.command(Action.EAT); r.command(Action.EAT); pig.command(Action.EAT); p.command(Action.WORK); r.command(Action.WORK); pig.command(Action.WORK); p.command(Action.SLEEP); r.command(Action.SLEEP); pig.command(Action.SLEEP); } } /* * 抽象类:只定义了行为(抽象方法), * eat() * work() * sleep() * command() * 但没有具体实现,就相当于是给了一个模板类,规则就按照模板上的要求填写,具体怎么写看具体子类 */ abstract class Action { public static final int EAT=1; public static final int WORK=5; public static final int SLEEP=10; public abstract void eat(); public abstract void work(); public abstract void sleep(); //通过命令确定要执行什么任务,至于任务怎么实现,取决于子类对象 public void command(int command){ switch(command){ case EAT: this.eat(); break; case WORK: this.work(); break; case SLEEP: this.sleep(); break; case EAT+WORK+SLEEP: this.eat(); this.sleep(); this.work(); } } } class Pig extends Action{ @Override public void eat() { System.out.println("猪吃饲料"); } @Override public void work() { } @Override public void sleep() { System.out.println("猪睡在圈里"); } } class Robbt extends Action{ @Override public void eat() { System.out.println("机器人需要吃饭"); } @Override public void work() { System.out.println("不停的工作"); } @Override public void sleep() { } } class Person extends Action{ @Override public void eat() { System.out.println("人需要吃美食"); } @Override public void work() { System.out.println("更好努力的工作"); } @Override public void sleep() { System.out.println("床上睡觉"); } }