我希望一堆子子类在构造函数结束后调用超级方法,就像这样:
目前这种方式可以实现,但我认为在每个子类构造函数的结尾调用
public abstract class Superclass {
...
public Superclass(...) {
... // do stuff before initializing subclass
}
protected void dispatch() { //method to be called directly after creating an object
doStuff();
...
}
public abstract void doStuff();
}
public class Subclass extends Superclass {
...
public Subclass(...) {
super(...); //has to be the first line
... //assign variables etc.
dispatch(); //has to be called after variables are assigned etc.
}
public void doStuff() {
//do stuff with assigned variables etc.
}
}
dispatch()
函数包含一系列在对象创建后必须应用于所有子类的操作。但我无法将此函数移动到超级构造函数中,因为它调用了来自需要已分配变量的子类的方法。但由于 super()
要求是子类构造函数的第一行,所以在调用超级构造函数之前我不能设置任何变量。目前这种方式可以实现,但我认为在每个子类构造函数的结尾调用
dispatch()
不是一个好的设计概念。是否有更优雅的解决方案?或者我是否应该重新思考我的设计概念呢?
SubSubClass
的构造函数被调用之前调用dispatch
,如果SubSubClass
重写了doStuff
,那么该方法将在类初始化之前被调用。 - Erwin Bolwidt