1抽象类的出现
针对某些情况,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如何实现这些方法。
- 抽象类中的非抽象元素(初始代码块、构造器)都是在创建其子类的实例时被调用的。
- 抽象类不能用于创建实例,只能当做父类被其他子类继承。
- 当使用abstract修饰类时,表明这个类只能被继承;
- 当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写);
- abstract不能用于修饰成员变量,不能用于修饰局部变量;.
- abstract不能用于修饰构造器;
1.1 abstract和final
- final和abstract永远不能同时使用。
原因:final修饰的类不能被继承,final修饰的方法不能被重写。而abstract修饰的类可以被继承,abstract修饰的方法一定要被子类重写,二者冲突。
1.2 abstract和static
- static和abstract不能同时修饰某个方法;
原因:static修饰一个方法时,该方法属于类本身,一个类不能调用一个没有方法体的方法。而abstract修饰的方法一定没有方法体,二者冲突。
例外:static和abstract并不是绝对互斥的,static和abstract可以同时修饰内部类。
1.3 abstract和private
- private和abstract不能同时修饰方法。
原因:private修饰的方法不能被子继承。而abstract修饰的方法只有被子类重写后才有意义,二者冲突。
2 抽象类的作用
抽象类体现的是一种模板模式的设计。
3 抽象类遇到面试
- abstract和final
- abstract和static
- abstract和private