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

Java 子类是否从它的超类继承构造函数?,java,constructor,Java,Constructor,在子类中,我们可以使用子类的构造函数初始化数据成员,该构造函数在内部调用超类的构造函数super()。如果子类不能从其超类继承构造函数,那么super()调用如何初始化超类?子类的构造函数可以从超类调用构造函数,但它们不是这样继承的 明确地说,这意味着如果您有以下情况: public class Super { public Super(int x) { } } public class Sub extends Super { public Sub()

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

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

明确地说,这意味着如果您有以下情况:

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

public class Sub extends Super
{
    public Sub()
    {
        super(5);
    }
}
那你就不能写了:

new Sub(10);
因为没有
Sub(int)
构造函数

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

从:

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


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

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

其中一个主要原因是,您可能不想超越超类构造函数,如果继承了它们,这是可能的。通过赋予开发人员重写超类构造函数的能力,您将削弱语言的封装能力


另请参见:

是用于引用超类的Java关键字,
super()
是调用超类构造函数的方法。构造函数没有被继承,但您仍然可以调用它。

首先,构造函数不是类的成员,只有成员被继承

其次,我们可以想象这样的情况:我们不希望子类拥有与父类相同的构造函数

想象一个抽象类的车辆,它有一个构造器车辆(int-wheels)和一个子类Bicycle


根据定义,自行车有两个轮子,所以我们可以想象自行车构造器将调用super(2),在这种情况下,自行车不公开构造器Bicycle(int wheels)不是更好吗

不..一点也不…子类不继承它的超类构造函数..相反,它调用它可以使用关键字“super()”调用它的超类构造函数..

什么意思,'如果子类不能继承构造函数'?每个类都有自己的构造函数,包括子类在那里不是很枯燥,Java--一个C++wienie@Phlip:只有当你有完全相同的需求时,你才会重复你自己——在这一点上,你只需要重复声明,显式地调用相应的超类构造函数。我看不出Java为什么要假设构造子类实例所需的参数与构造超类实例所需的参数相同。我同意这个决定。
public class Super
{
    public Super(int x)
    {
    }
}

public class Sub extends Super
{
    public Sub(int x)
    {
        super(x); // call constructor from Super class 
    }
}
Sub obj = new Sub(5);