抽象类
在开发中,设计父类时,首先考虑抽象类
什么是抽象类?
用abstract修饰的类
抽 象类的限制
- 继承抽象类的子类必须覆写抽象类中的全部抽象方法(用abstract修饰的方法)
- 抽象类不能直接用new 实例化对象
- 对象实例化可以通过对象多态性通过子类实例向上转型完成
- 抽象类不能用final修饰,因为抽象类必须有子类,而final关键字修饰的类不能有子类
总结:抽象类只是比普通类增加了抽象方法以及对子类的强制性的覆写要求而已,其他的使用和普通子类是一样的
- 抽象类中可以没有抽象方法,但是尽管如此,也不能直接通过new 直接实例化抽象对象
- 抽象类中可以有static方法,并且不受到抽象类的限制
模板设计模式
假如现在要描述三类的事物
- 机器人:不休息,只知道补充能量和工作
- 人:需要休息、需要吃饭和工作
- 猪:需要休息、只需要吃饭不工作
考虑抽象类作为集合点
实现代码操作:
/** 抽象类:提供一个动作模板 */
abstract class Action {
static int EAT = 1;
static int WORK = 5;
static int SLEEP = 10;
public void getConmand(int number) {
switch (number) {
case 1:
eat();
break;
case 5:
work();
break;
case 10:
sleep();
break;
case 16:
eat();
sleep();
work();
break;
default:
break;
}
}
/** 抽象方法:子类必须覆写 */
public abstract void eat();
public abstract void sleep();
public abstract void work();
}
/** 机器人类:继承动作抽象类 */
class Robot extends Action {
@Override
public void eat() {
System.out.println("充电补充能量");
}
@Override
public void sleep() {
System.out.println("不需要休息");
}
@Override
public void work() {
System.out.println("按照规矩死板工作");
}
}
/** 人类:继承动作抽象类 */
class Person extends Action {
@Override
public void eat() {
System.out.println("安静的吃饭");
}
@Override
public void sleep() {
System.out.println("躺下睡觉");
}
@Override
public void work() {
System.out.println("灵活的工作");
}
}
/** 猪类:继承动作抽象类 */
class Pig extends Action {
@Override
public void eat() {
System.out.println("吃人类的剩饭");
}
@Override
public void sleep() {
System.out.println("倒地就睡");
}
@Override
public void work() {
System.out.println("不工作");
}
}
/** @author Administrator */
public class Main {
public static void main(String[] args) {
// 通过子类对象向上转型,实例化三个对象
Action roBotAction = new Robot();
Action personAction = new Person();
Action pigAction = new Pig();
System.out.println("--------机器人-------");
roBotAction.getConmand(Action.EAT);
roBotAction.getConmand(Action.WORK);
roBotAction.getConmand(Action.SLEEP);
System.out.println("--------人类-------");
personAction.getConmand(Action.EAT);
personAction.getConmand(Action.WORK);
personAction.getConmand(Action.SLEEP);
System.out.println("--------猪类-------");
pigAction.getConmand(Action.EAT);
pigAction.getConmand(Action.WORK);
pigAction.getConmand(Action.SLEEP);
}
}
运行结果:
代码编译器:IntelliJ IDEA 2020.02