![](/img/trans.png)
[英]Navigating around instantiating an abstract class, is there a flaw of in my OOP design?
[英]Abstract methods in an abstract class constructor: design flaw?
我有一个抽象类Entity
。 每个扩展Entity
类都需要一些默认设置和一些可自定义的设置:
public abstract class Entity {
protected Entity() {
// ... default setup
customSetup();
}
protected abstract void customSetup();
// ...
}
我的扩展类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!
}
}
正如评论所述,此代码不起作用。
我可以扔掉customSetup()
并将所有自定义代码放在super()
,但是使用那个抽象方法可以更清楚地说明你应该放在那里。
我觉得我违反了一些OOP设计规则。 做我想要的正确方法是什么?
调用可以从构造函数覆盖的方法通常是个坏主意。 问题是该类尚未完全初始化,并且当在子类中调用该方法时,它可能会导致麻烦。
看看这个问题: 构造函数中的可覆盖方法调用有什么问题? ,它有一个很好的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.