Java错误:默认构造函数未定义隐式超级构造函数

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

我想做的事有可能吗?


慕斯王
浏览 1247回答 3
3回答

呼如林

获得此错误是因为没有构造函数的类具有违约构造函数,它没有参数,相当于以下代码:public ACSubClass() {     super();}但是,由于BaseClass声明了构造函数(因此没有编译器将提供的默认、无Arg构造函数),这是非法的-扩展BaseClass的类不能调用super();因为BaseClass中没有无参数构造函数。这可能有点违背直觉,因为您可能认为子类自动具有基类所具有的任何构造函数。最简单的方法是基类不声明构造函数(因此具有默认的、非Arg构造函数)或声明的no-arg构造函数(单独或与任何其他构造函数一起)。但是这种方法通常不能应用,因为您需要将任何参数传递到构造函数中来构造类的合法实例。

青春有我

对于那些在谷歌上搜索这个错误并到达这里的人来说,可能还有另一个原因来接收它。Eclipse在项目设置-系统配置不匹配时会出现此错误。例如,如果将Java1.7项目导入Eclipse,并且没有正确设置1.7,则会得到此错误。那你要么去Project - Preference - Java - Compiler和switch to 1.6 or earlier;或者去Window - Preferences - Java - Installed JREs并添加/修复您的JRE 1.7安装。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java