【发布时间】:2010-11-14 22:05:41
【问题描述】:
我有一些简单的 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() 方法 (template method pattern)。
这很好用,但我不喜欢在子类中有多余的构造函数。打字比较多,维护起来也很困难。如果我要更改BaseClass 构造函数的方法签名,我将不得不更改所有子类。
当我从子类中删除构造函数时,我得到这个编译时错误:
Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor
我正在尝试做的事情可能吗?
【问题讨论】:
-
请离开“冗余”构造函数!它保持代码的可读性,并且所有现代 IDE 都可以自动创建它,因此您只需键入一个快捷方式。
-
一年后重新阅读我自己的问题,我突然想到我可以像 matt b 建议的那样删除构造函数(包括在基类中),然后使用静态工厂方法来构建实例。
标签: java inheritance dry boilerplate