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:\Users\admin\Desktop\java_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:\Users\admin\Desktop\java_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:\Java\code\练习七> 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:\Java\code\练习七> javac .\Test.java
.\HPPrinter.java:1: 错误: HPPrinter不是抽象的, 并且未覆盖Printer中的抽象方法print()
class HPPrinter extends Printer{
^
1 个错误