1、抽象函数的语法特征
2、抽象类的语法特征
3、抽象类的作用
抽象函数
只有函数的定义,没有函数体的函数被称为抽象函数;
abstract void func();
抽象类
使用abstract定义的类称为抽象类。
abstract class Person{}
注意:
1、抽象类不能够生成对象;
2、如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类。
3、如果一个类当中没有抽象函数,这个类也可以被声明为抽象类。
下面来用一个例子说明下:
Person.java:
abstract class Person{ String name; int age; void intruduce(){ System.out.println("My name is" + name + ",my age is " + age); } abstract void eat(); }
Chinese.java
class Chinese extends Person{ void eat(){ System.out.println("use chopsticks."); } }
Test.java:
public class Test{ public static void main(String[] args){ Person p = new Chinese(); p.eat(); } }
输出结果:
PS C:UsersadminDesktopjava_code练习八> java Test use chopsticks.
抽象类可以有构造函数
Person.java
abstract class Person{ String name; int age; Person(){ System.out.println("Person"); } void intruduce(){ System.out.println("My name is" + name + ",my age is " + age); } abstract void eat(); }
Chinese.java
class Chinese extends Person{ Chinese(){ System.out.println("Chinese"); } void eat(){ System.out.println("use chopsticks."); } }
输出结果:
PS C:UsersadminDesktopjava_code练习八> java Test Person Chinese use chopsticks.
这是因为会自动加上super();
class Chinese extends Person{ Chinese(){ super(); System.out.println("Chinese"); } void eat(){ System.out.println("use chopsticks."); } }
那么为什么要使用抽象类呢?
可以使语义和语法的错误达成统一。
class Printer{ void open(){ System.out.println("open"); } void close(){ System.out.println("close"); } void print(){ } }
class HPPrinter extends Printer{ void print(){ System.out.println("Using HPPrinter."); } }
class CanonPrinter extends Printer{ void print(){ System.out.println("Using CanonPrinter."); } }
PS D:Javacode练习七> java Test open Using HPPrinter. close open Using CanonPrinter. close
这样写是没问题的,但是如果开发者不是一个人的话,那么就会产生一个问题,在子类中没有复写函数的话,编译器并不会报错。因此修改
abstract class Printer{ void open(){ System.out.println("open"); } void close(){ System.out.println("close"); } abstract void print(); }
如果子类中没有复写函数的话,就会报如下的错误:
PS D:Javacode练习七> javac .Test.java .HPPrinter.java:1: 错误: HPPrinter不是抽象的, 并且未覆盖Printer中的抽象方法print() class HPPrinter extends Printer{ ^ 1 个错误