继承类中的构造函数调用

时间:2012-03-24 20:31:38

标签: java

这是关于Java的一个非常基本的问题。我已经读过某个地方,首先在子类的构造函数中隐式调用超类的构造函数。但我找不到文档的参考,详细阅读。有人可以提供这个参考吗?

这是我正在谈论的一个例子,它输出super sub字符串:

class SuperClass {
    static String s = "";
    protected SuperClass() { s += "super "; }
}

public class SubClass extends SuperClass {
    private SubClass() { s += "sub"; }
    public static void main(String[] args) {
        new SubClass();
        System.out.println(s);
    }
}

1 个答案:

答案 0 :(得分:7)

Java中没有覆盖的构造函数 - 它们并不是多态的,而是从一开始就被称为。

但是每个构造函数都必须调用超类的构造函数,隐式地(调用无参数的)或显式的(使用super(...)作为构造函数体的第一行 - 链到同一个类中的另一个构造函数,this(...)作为构造函数体的第一行。链接的构造函数在构造函数体的其余部分之前执行。

有关详细信息,请参阅section 8.8.7 of the Java Language Specification