Java继承 - 构造函数

Col*_*tru 11 java inheritance constructor

在为我的决赛学习期间,我在我正在研究的书中遇到了以下陈述.考虑以下代码:

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

class B extends A {
    public B(int x ) {   }
}
Run Code Online (Sandbox Code Playgroud)

是否必须在类B(super(x))的构造函数中调用类A的构造函数.该书指出它不是强制性的,因为它们具有确切数量和类型的参数.但是当我在java编译器中尝试这个时,会抛出以下错误:

A类中的构造函数A不能应用于给定类型; required:int found:无参数原因:实际和形式参数列表的长度不同

Boz*_*zho 17

编译器会super()在开头自动插入.

但是,甚至添加了构造函数参数super()(不带参数),它调用超类的默认构造函数.你没有,因此错误.

您必须指定super(x)(调用A(x))或定义无参数构造函数.

顺便说一下,Eclipse编译器提供了一种更好的错误消息:

隐式超级构造函数A()未定义.必须显式调用另一个构造函数