抽象类最大的特点是强制规定了子类的实现结构,同时还可以起到模板的作用。
模板方法设计模式(比如定义一个操作中的算法的骨架,将步骤延迟到子类中)的组成:
- 抽象类:定义算法的骨架,实现了模板方法;
- 具体类:实现(覆写)抽象类中的抽象方法,得到完整的算法。
举个例子:人和猪都是动物,都能够吃饭、睡觉、“工作”,但是这两类在实现这些动作时肯定是有差别的。
代码示例:
//抽象类的应用——模板方法设计模式
abstract class Animal{//抽象方法
public final void fun() {//普通方法,防止子类改写,所以加了final关键词
eat();
sleep();
work();
}
public abstract void eat();//抽象方法
public abstract void sleep();//抽象方法
public abstract void work();//抽象方法
}
class Human extends Animal{//一定要覆写抽象方法
public void eat() {
System.out.println("人吃饭");
}
public void sleep() {
System.out.println("人睡觉");
}
public void work() {
System.out.println("人努力工作");
}
}
class Pig extends Animal{//一定要覆写抽象方法
public void eat() {
System.out.println("猪吃饲料");
}
public void sleep() {
System.out.println("猪睡觉");
}
public void work() {
System.out.println("猪努力长肉");
}
}
public class TemplateDemo {
public static void main(String[] args) {
Animal a=new Human();
a.fun();
System.out.println("=====================");
Animal b=new Pig();
b.fun();
}
}
运行结果:
人吃饭
人睡觉
人努力工作
=====================
猪吃饲料
猪睡觉
猪努力长肉
总结:
- 抽象类本身就相当于一个模板;
- 当很多类中都需要实现数个相同的方法时,为了避免代码的重用,可以用抽象类。