package cm.abstracts.application;
//这个类用来测试使用一个行为类
public class ModelFfourtySix {
public static void main(String[] args) {
//测试使用类,须通过创建对应类对象
//创建父类(抽象类)对象,必须通过子类对象的向上转型才能创建
Action r = new Robot();
r.command(1);
r.command(7);
r.eat();
r.work();
Action h = new Human();
h.command(1);
h.command(7);
h.command(5);
h.eat();
h.work();
h.sleep();
Action p = new Pig();
p.command(1);
p.command(5);
p.eat();
p.sleep();
}
}
//创建抽象类,抽象类必有子类,关键字abstract,继承关系:父类
//定义一个抽象的行为类,行为不是具体的
abstract class Action{
//关键字final:不可变的量,即常量。static:三个子类具备共同的属性,共享变量。
//常量名大写,方便与变量进行区分。常量,其值从程序执行一直到结束都不发生改变,是为常量。
public static final int EAT = 1;
public static final int SLEEP = 5;
public static final int WORK = 7;
//抽象每个子类的行为(方法),然后每个子类据此定义(覆写)具体的内容(方法/功能),规定子类的操作标准
public abstract void eat();
public abstract void sleep();
public abstract void work();
//创建一个普通方法,调用抽象类的行为(抽象方法),行为不是具体的
public void command(int flag) {
switch(flag) {
case EAT:
this.eat();
break;
case SLEEP:
this.sleep();
break;
case WORK:
this.work();
break;
}
}
}
//创建子类,一个子类只有一个抽象类(父类),关键字extends,父类由抽象方法时覆写父类所有抽象方法
class Robot extends Action{
//覆写抽象类中的抽象行为,具体化行为
@Override
public void eat() {
System.out.println("机器人正在补充能量" + EAT);
}
@Override
public void work() {
System.out.println("机器人正在工作" + WORK);
}
@Override
public void sleep() {
// System.out.println("机器人无法休息,只能不停工作");
}
}
class Human extends Action{
//覆写抽象类中的抽象方法,具体化行为
@Override
public void eat() {
System.out.println("到了吃饭时间了" + EAT);
}
@Override
public void sleep() {
System.out.println("到了睡觉时间了" + SLEEP);
}
@Override
public void work() {
System.out.println("到了上班时间了" + WORK);
}
}
class Pig extends Action{
//覆写抽象类中的抽象行为,具体化行为
@Override
public void eat() {
System.out.println("小猪猪正在吃饭饭" + EAT);
}
@Override
public void work() {
// System.out.println("小猪猪只有吃饭和睡觉,不能工作");
}
@Override
public void sleep() {
System.out.println("小猪猪正在睡觉" + SLEEP);
}
}
彦舜原创,首发