在准备期末考试时,我在我目前正在学习的书中看到了以下陈述。考虑以下代码:
class A {
public A(int x) { }
}
class B extends A {
public B(int x ) { }
}
是否强制在B类的构造函数中调用A类的构造函数(super(x))。书中指出这不是强制性的,因为它们具有确切的参数数量和类型。但是当我在 java 编译器中尝试这个时,会抛出以下错误:
类 A 中的构造函数 A 不能
适用于给定类型;必需的:
发现 int:没有参数原因:
实际和形式参数列表
长度不同
编译器自动插入super()
在一开始的时候。
然而,即使构造函数参数,super()
(不带参数)添加调用default超类的构造函数。而你没有,因此会出现错误。
你必须指定super(x)
(调用A(x)
),或者定义一个无参构造函数。
顺便说一下,Eclipse 编译器给出了更好的错误消息:
隐式超级构造函数 A() 未定义。必须显式调用另一个构造函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)