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

99

我有一些简单的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

我想做的事情是否可能实现?


1
请不要删除“冗余”的构造函数!它可以保持代码的可读性,而且所有现代IDE都可以自动创建它,所以你只需要按一下快捷键即可。 - Andreas Dolk
3
重新阅读自己一年前的问题,我意识到我可以像Matt B建议的那样删除构造函数(包括基类中的构造函数),然后使用静态工厂方法来构建实例。 - Joel
12个回答

-1

我遇到了这个错误,通过将方法旁边的抛出异常移除并放入try/catch块中进行修复。

例如:

public static HashMap<String, String> getMap() throws SQLException
{

}

收件人:

public static Hashmap<String,String> getMap()
{
  try{

  }catch(SQLException)
  { 
  }
}

这个答案与缺少构造函数的编译器错误无关。 - Robert

-1

您可以通过向基类添加一个无参数构造函数(如下所示)来解决此错误。

祝好!

 abstract public class BaseClass {
        // ADD AN ARGUMENTLESS CONSTRUCTOR TO THE BASE CLASS
        public 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";
    }
}

这使得构造无效对象变得容易(没有 someString),从而完全违背了构造函数的目的。 - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接