1.抽象类的定义
从一个简单的层面来说只要被abstract关键字修饰的类就是抽象类,被修饰的方法就是抽象方法,一个抽象类可以含有或者不含有抽象方法,抽象方法只包含一个方法名,而没有方法体。
抽象的含义是什么呢?抽象是一个隐藏实现细节并只向用户显示功能的过程。
我们可以将一个方法进行抽象,也可以将一个类进行抽象。
抽象类定义:在 Java 中一个没有方法体的方法应该定义为抽象方法 而类中如果有抽象方法,则必须定义为抽象类
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。
2.抽象类的使用格式
修饰符 abstract 返回值类型 方法名 (参数列表);
3.使用原则
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义,抽象类体现的是模板思想,模板是通用的东西抽象类中已经是具体的实现(抽象类中可以有成员变量和实现方法),而模板中不能决定的东西定义成抽象方法,让使用模板(继承抽象类的类)的类去重写抽象方法实现需求,这是典型的模板思想。
4.模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
特点:
- 子类按需要重写父类中的方法。
- 以抽象父类中的定义进行调用。
模板模式的使用场景
1.有多个子类共有的方法,且逻辑相同。
2.重要的、复杂的方法,可以考虑作为模板方法。