它的子类可以通过 super 进行调用构造函数。
追问super()
但是有什么意义呢?
追答可以在抽象类的构造函数中进行一些初始化的操作,这样就不必在子类中进行初始化了,只需要调用一下父类的构造函数就可以了。
追问但是他是对对象进行初始化啊,而它不能new对象。
不对对象初始化,那还能初始化什么啊?
追答创建子类对象时,会执行子类的构造函数,在子类中构造函数中调用抽象类的构造函数,就可以对抽象类中的成员进行初始化。
追问为什么要对抽象类的成员进行初始化呢?不对每个对象(子类)间数据都是独立的吗?
追答写个例子吧:
abstract class Parent {
private int a;
public Parent(int a) {
// 初始化成员变量 a
this.a = a;
}
public void printParent() {
System.out.println("a=" + this.a);
}
}
class Child extends Parent {
private int b;
public Child() {
// 调用父类构造函数,将父类成员变量初始为25
super(25);
// 初始化本类成员变量b
this.b = 12;
}
public void printChild() {
System.out.println("b=" + this.b);
}
}
public class App {
public static void main(String[] args) {
Child c = new Child();
c.printParent();
c.printChild();
}
}
追问你为什么不用get和set和读写这个a呢?然后子类可以继承get,set,?
追答会有些情况,并不希望父类的一些成员暴露给外部,所以不会定义set方法,只给本类使用,但又要对其进行初始化,所以也只能这样了。