默认 Java 构造函数中的隐式超级构造函数错误
在 Java 中,编译器会自动为未显式定义的类提供默认构造函数任何构造函数。但是,当基类定义构造函数时,编译器将不再为其子类隐式生成默认构造函数。这可能会导致“默认构造函数未定义隐式超级构造函数”错误。
示例:
考虑以下代码:
abstract public class BaseClass { String someString; public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); } public class ACSubClass extends BaseClass { public ASubClass() { // default constructor // super(someString); // error: super() must be invoked in subclasses } public String getName() { return "name value for ASubClass"; } }
这里,ACSubClass 没有显式构造函数。相反,它依赖于编译器提供的默认构造函数。但是,由于 BaseClass 定义了构造函数,因此 BaseClass 不存在默认构造函数。这会导致编译器错误,指出必须在子类中定义显式构造函数。
解决方案:
要解决此错误,必须提供显式构造函数在使用 super(parameters) 调用超级构造函数的子类中。或者,可以修改基类以提供默认构造函数。
// Option 1: Provide an explicit constructor in the subclass public class ACSubClass extends BaseClass { public ASubClass(String someString) { super(someString); } public String getName() { return "name value for ASubClass"; } } // Option 2: Modify the base class to have a default constructor abstract public class BaseClass { String someString; public BaseClass() {} // added default constructor public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); }
以上是为什么 Java 子类会出现'隐式超级构造函数未定义”错误,以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!