子类是否从超类继承构造函数?

2022-09-01 18:34:47

在子类中,我们可以使用子类的构造函数初始化数据成员,该构造函数在内部调用超类的构造函数。如果子类无法从其超类继承构造函数,那么调用如何初始化超类?super()super()


答案 1

来自子类的构造函数可以从超类调用构造函数,但它们不是这样继承的。

需要明确的是,这意味着如果你有这样的东西:

public class Super
{
    public Super(int x)
    {
    }
}

public class Sub extends Super
{
    public Sub()
    {
        super(5);
    }
}

那么你就不能写:

new Sub(10);

因为没有构造函数。Sub(int)

将构造函数视为具有正在初始化的对象的隐式参数的未继承静态方法可能会有所帮助。

来自 Java 语言规范的第 8.8 节

构造函数声明不是成员。它们永远不会被继承,因此不会被隐藏或覆盖。


答案 2

否 子类不能继承其超类的构造函数。

构造函数是类的特殊函数成员,因为它们不被子类继承。构造函数用于在创建时为对象提供有效状态。

其中一个主要原因是,您可能不想覆盖超类构造函数,如果它们是继承的,那将是可能的。通过使开发人员能够重写超类构造函数,您将侵蚀语言的封装能力。

另请参阅: 构造函数永远不会被继承