三、面向对象——14-抽象类
14-抽象类
1.抽象方法和抽象类
(1)抽象方法和抽象类必须用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法;
(2)抽象方法和抽象类的定义规则:
1)抽象类和抽象方法必须使用abstract定义,抽象方法不能有方法体;
2)不论这个抽象类中是否有抽象方法,这个抽象类都不能被实例化,即不能被创建实例;
3)抽象类可以包含五中成分:成员变量、方法、构造器、初始化块、内部类(接口、枚举类),抽象类中的构造器不能被用于创建实例,只能用于子类调用;
4)只要含有抽象方法的类一定是抽象类;
(3)注意final关键字永远不能和abstract关键字同时使用;
(4)抽象类例子:
People抽象类,是Student和Teacher类的父类:
People:
public abstract class People { //构造方法 public People(){ } //抽象方法 public abstract void action(); }
Student:
public class Student extends People{ public Student() { } //实现抽象父类方法 public void action() { System.out.println("学生学习"); } }
Teacher:
public class Teacher extends People{ public Teacher() { } @Override public void action() { // TODO Auto-generated method stub System.out.println("教师授课"); } }
Test:
public class Test { public static void main(String[] args) { People s = new Student(); People t = new Teacher(); s.action(); t.action(); } }
2.抽象类的作用
(1)抽象类体现的是一种模板模式的的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式;
(2)使用模板模式的简单规则:
1)抽象父类可以只定义某些需要使用的方法,把不能实现的部分抽象成抽象方法留给子类实现;
2)父类中可能包含需要调用其他系列方法的方法,这些被调用方法可以由弗雷实现,也可以由其子类实现,父类中提供的方法只是定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖于其子类的辅助。