使用关键字:abstract
1、抽象函数
只有函数的定义,没有函数体的特殊函数被称为抽象函数,如:
abstract void fun();
抽象函数所在类必须是抽象类。
2、抽象类
使用abstract关键字来定义的类,如:
abstract class Person {...};
2.1、抽象类不能够生成对象,即不能使用new来调用构造函数。
2.2、如果一个类当中包含有抽象函数,那么这个类必须声明为抽象类。
2.3、如果一个类当中没有抽象函数,那么这个类也可以声明成抽象类。
抽象类天生是用来当“爹”的,它本身不能生成对象,但通过继承,在子类中可以对它的抽象函数进行复写,复写时不要再加abstract关键字。
抽象类是有构造函数的(只不过不能被new),但可以在子类中通过super关键字来调用。
3、抽象类的最基本应用
如果一个类,它的某一函数必须由子类实现,而又无法在父类中写出一个通用的函数,就可以定义成抽象函数和类。
这样的话,如果子类忘记重写抽象函数,JVM就会报错,达到“如果一段代码,它的语意错误,那么它的语法也应该错误”的目的,参考打印机的例子。
abstract class Printer { void open() { System.out.println("Open"); } void close() { System.out.println("Close"); } abstract void print(); }
class HpPrinter extends Printer { void print() { System.out.println("使用HP打印机进行打印"); } }
class CanonPrinter extends Printer { void print() { System.out.println("使用Canon打印机进行打印"); } }
class Test { public static void main(String[] args) { HpPrinter P1 = new HpPrinter(); P1.open(); P1.print(); P1.close(); CanonPrinter P2 = new CanonPrinter(); P2.open(); P2.print(); P2.close(); } }