子类是否从它的超类inheritance构造函数?

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

子类中的构造函数可以从超类中调用构造函数,但它们不会像这样inheritance。

要清楚,这意味着如果你有类似的东西:

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

那么你不能写:

 new Sub(10); 

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

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

从Java语言规范,第8.8节 :

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

super是用于引用超类的Java关键字,而super()是调用超类的构造函数的方法。 构造函数不是inheritance的,但您仍然可以调用它。

没有子类不能inheritance其超类的构造函数。

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

其中一个主要原因是因为您可能不希望覆盖超类构造函数,如果它们是inheritance的,那么它们是可能的。 通过让开发人员能够覆盖超类构造函数,您将侵蚀该语言的封装能力。

另请参见: 构造函数永远不会被inheritance

没有……根本没有…一个子类不inheritance它的超类构造函数。它调用它可以调用它的超类构造函数使用关键字“super()”…

首先,构造函数不是类的成员,只有成员是inheritance的。

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

想象一个抽象类Vehicle,带有构造函数Vehicle(int wheels)和一个子类Bicycle。

根据定义,一辆自行车有2个轮子所以我们可以想象自行车构造器会调用超级(2)并且在这种情况下自行车不暴露构造器自行车(int车轮)不是更好吗?