为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2019-07-04 16:13:06
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我想做的事有可能吗?
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

获得此错误是因为没有构造函数的类具有违约构造函数,它没有参数,相当于以下代码:

public ACSubClass() {
    super();}

但是,由于BaseClass声明了构造函数(因此没有编译器将提供的默认、无Arg构造函数),这是非法的-扩展BaseClass的类不能调用super();因为BaseClass中没有无参数构造函数。

这可能有点违背直觉,因为您可能认为子类自动具有基类所具有的任何构造函数。

最简单的方法是基类不声明构造函数(因此具有默认的、非Arg构造函数)或声明的no-arg构造函数(单独或与任何其他构造函数一起)。但是这种方法通常不能应用,因为您需要将任何参数传递到构造函数中来构造类的合法实例。


查看完整回答
反对 回复 2019-07-04
?
青春有我

TA贡献1784条经验 获得超8个赞

对于那些在谷歌上搜索这个错误并到达这里的人来说,可能还有另一个原因来接收它。Eclipse在项目设置-系统配置不匹配时会出现此错误。

例如,如果将Java1.7项目导入Eclipse,并且没有正确设置1.7,则会得到此错误。那你要么去Project - Preference - Java - Compilerswitch to 1.6 or earlier;或者去Window - Preferences - Java - Installed JREs并添加/修复您的JRE 1.7安装。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 1246 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信