抽象类的最大特点在于强制规定了子类的实现结构,除了这个特点以外,抽象类更多情况下起到一个模板的作用
下面举一个例子:
人 = 吃饭 + 睡觉 + 工作 ;
猪 = 吃饭 + 睡觉 ;
机器人 = 吃饭 + 工作 ;
定义行为类
abstract class Action{ // 描述的是一个抽象的行为
public static final int EAT = 1 ;
public static final int SLEEP = 5 ;
public static final int WORk = 10 ;
public void command(int cmd){
switch(cmd){
case EAT :
this.eat() ;
break ;
case SLEEP :
this.sleep() ;
break ;
case WORk :
this.work() ;
break ;
case EAT + SLEEP + WORk :
this.eat() ;
this.sleep() ;
this.work() ;
break ;
}
}
// 不确定具体实现,但是行为应该定义好
public abstract void eat() ;
public abstract void sleep() ;
public abstract void work() ;
}
定义子类实现
class Person 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() {
// 猪不工作
}
}
class Robot extends Action {
public void eat() {
System.out.println("机器人吃饭,补充能量") ;
}
public void sleep() {
// 机器人不睡觉
}
public void work() {
System.out.println("机器人一直在工作") ;
}
}
定义具体实现
public class Test{
public static void main(String[] args) {
fun(new Person());
fun(new Pig());
fun(new Robot());
}
public static void fun(Action action){
action.command(Action.EAT + Action.SLEEP +Action.WORk) ;
}
}
抽象类在实际的使用过程中会定义一些固化的模式,它只能接收几种特定的指令,但是每种指令的具体实现由子类
完成,父类只给出了行为的约定。
**最具有代表性的就是后面要学习的Servlet
总**
总结:
1. 抽象类虽然定义了子类必须要做的事情,但是抽象类依然会有单继承局限。
2. 抽象类的使用必须要通过子类进行对象实例化处理。