我有抽象类:
public abstract class MyComposite extends Composite {
protected abstract void initHandlers();
}
还有很多扩展它的类。如何确保在子类构造结束时将调用initHandlers()方法?子类示例:
public CollWidget extends MyComposite {
public CollWidget() {
/** Some stuff thats need to be done in this particular case */
initHandlers(); // This method should be invoked transparently
}
@Override
public void initHandlers() {
/** Handlers initialisation, using some components initialized in constructor */
}
}
最佳答案
由于父构造函数总是在子构造子之前(显式或隐式)调用,因此无法自动执行。
一种解决方法是:
public abstract class MyComposite {
public MyComposite() {
construct();
initHandlers();
}
protected abstract void construct();
protected abstract void initHandlers();
}
public class CollWidget extends MyComposite {
@Override
protected void construct() {
// called firstly
}
@Override
public void initHandlers() {
// called secondly
}
}