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(String someString) {
super(someString);
}
public String getName() {
return "name value for ASubClass";
}
}
我将有很多的子类BaseClass
,每个子类以getName()
自己的方式(模板方法模式)实现方法。
这很好用,但是我不喜欢子类中有多余的构造函数。输入更多,难以维护。如果要更改BaseClass
构造函数的方法签名,则必须更改所有子类。
当我从子类中删除构造函数时,出现此编译时错误:
Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor
我想做的事可能吗?
回答:
你会收到此错误,因为没有构造函数的类具有默认构造函数,该构造函数没有参数,并且等效于以下代码:
public ACSubClass() { super();
}
但是,由于你的BaseClass声明了一个构造函数(因此没有默认值,否则将由编译器提供no-arg构造函数),这是非法的-扩展BaseClass的类无法调用,super()
;因为没有无参数的构造函数在BaseClass中。
这可能有点违反直觉,因为你可能认为子类自动具有基类所具有的任何构造函数。
解决此问题的最简单方法是,基类不声明构造函数(因此具有默认的no-arg构造函数)或具有声明的no-arg构造函数(无论是单独使用还是与任何其他构造函数一起使用)。但是通常无法应用这种方法-因为你需要将任何参数传递到构造函数中,以构造类的合法实例。
以上是 Java错误:未为默认构造函数定义隐式超级构造函数 的全部内容, 来源链接: utcz.com/qa/430544.html