Str*_*nst 1 java inheritance constructor
我希望一堆子类在完成如下构造函数后调用一个超级方法:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
该dispatch()函数在创建对象后包含一组与对象有关的事情,该事情必须应用于所有子类。我不能将此函数移到超级构造函数中,因为它从需要已分配变量的子类中调用方法。但是由于由于super()必须是子构造函数的第一行,因此在调用超级构造函数之前,我无法设置任何变量。
它现在可以正常工作,但是我发现dispatch()在每个子类的构造函数的末尾调用它是一个不好的概念。有没有更优雅的方式来解决这个问题?还是我应该完全重新考虑我的概念?
您的请求违反了几种Java最佳实践,例如:
不要在构造函数中进行复杂的配置,仅填充私有(最终)成员变量,并且仅执行非常基本的一致性检查(如果有的话)。
不要从构造函数调用non private或non final方法,甚至不能间接调用。
因此,我强烈建议您考虑一下类的设计。很有可能您的班级太多且有太多的责任感。