抽象函数和抽象类都是用abstract开头,抽象类和抽象函数有以下的规则:
- 抽象类不能生成对象(意思就是只能当做父类)
- 如果一个类中有抽象函数,那么这个类必须是抽象类
- 一个类中即使没有抽象函数也可以被声明为抽象类
抽象类不能生成对象,那到底能不能实现构造函数呢?
其实是可以的,在继承的子类中,当我们生成子类的对象,它就会调用父类的构造函数。下面介绍一个小例子,新建一个抽象类Person:
abstract class Person {
String name;
int age;
Person(){
System.out.println("---Person构造函数");
}
Person(String name,int age){
this.name=name;
this.age=age;
print();
}
void print(){
System.out.println(name+"---"+age);
}
abstract void eat ();
}
然后写一个China类继承Person:
public class China extends Person {
China(){
super();
System.out.println("---China无参构造函数");
}
China(String name,int age){
super(name, age);
System.out.println("---China有参构造函数");
}
@Override
void eat() {
System.out.println("===用筷子");
}
}
最后就可以新建一个实现类,生成China对象实现Person类中得有参和无参构造函数。
最后,我们来讨论一下抽象类存在的意义。当我们在抽象类中实现了抽象方法,那么在继承类中你就必须复写抽象类中得抽象方法,要不然编译就无法通过,这样就能提醒开发者不要忘记应该做的事情。当然,抽象类的意义并不只是这个,不过在学习JAVA中我们应该记住一句话:
如果一段代码在语意上有错误,那么在语法上也是应该有错误的!