Java中抽象不能new,但是为什么抽象类可以写一个有参的构造函数?有什么作用?

如题所述

它的子类可以通过 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方法,只给本类使用,但又要对其进行初始化,所以也只能这样了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答