小编典典

Java继承-构造函数

java

在为期末考试而学习时,我在正在学习的书中遇到了以下陈述。考虑以下代码:

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

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

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

类A中的构造函数A不能应用于给定类型;必需:发现整数:无参数原因:实际和正式参数列表的长度不同


阅读 179

收藏
2020-11-16

共1个答案

小编典典

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

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

您必须指定super(x)(调用A(x)),或定义一个无参数的构造函数。

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

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

2020-11-16