我有一个抽象的课Entity.扩展的每个类Entity都需要一些默认设置和一些可自定义的设置:
public abstract class Entity {
protected Entity() {
// ... default setup
customSetup();
}
protected abstract void customSetup();
// ...
}
Run Code Online (Sandbox Code Playgroud)
我的扩展类MyEntity在构造函数中使用一个参数,该参数将用于customSetup():
public class MyEntity extends Entity {
private Data data;
public MyEntity(Data d) {
super(); // in here customSetup() is called!
data = d;
}
@Override
protected void customSetup() {
codeDependingOn(data); // will throw NPE: data==null yet!
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论所述,此代码不起作用.
我可以扔掉customSetup()并放下所有自定义代码super(),但是使用那种抽象方法可以更清楚地说明你应该放在那里.
我觉得我违反了一些OOP设计规则.做我想要的正确方法是什么?