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

回到顶部