基本上,我想要做的是force子類調用抽象超類方法(在子類中實現),所以我不必每個都明確寫出它我創建一個新的子類。如何強制子類調用抽象實現的方法
我曾經在超類的構造函數中寫過它,因爲我希望它在每個實現中強制它。
public abstract class SupahClass {
public SupahClass() {
doStuff(); // It IS executed when the subclass constructor is called
init(); // NOT executed, even though it's implemented
}
private void doStuff() { ... }
protected abstract void init();
}
public class SomeSubClass extends SupahClass {
// The problem lies HERE: this is executed AFTER init() ... so it gets NULL again
private TextBox myTextBox = null;
public SomeSubClass() {
super(); // invokes the super constructor, so init() should be called
// I could call init(); here EACH time i create a new subclass... but no :)
}
@Override
public void init() {
this.myTextBox = new TextBox(); // Executed BEFORE its declared as null above
}
}
當然,超真的不能調用它,因爲它的一個抽象的(所以未定義)方法,但它的一個抽象類,所以它不能被實例化,它必須委託任務它的子類,那麼爲什麼他們不能稱之爲抽象但現在實施的方法?
編輯 見子類物業myTextBox
和init()
實施
你認爲哪一個方法,我應該怎麼辦?在財產申報中取出= null
(duhhh)
或刪除init()
在超類和顯式調用它的子類的構造函數(這是我想避免的,因爲我必須把它寫的時間100% ..)
這將工作。這顯然不是您的實際代碼 - 您的實際代碼在某種重要方面必須與此不同。爲什麼不發佈你的實際代碼,讓我們看看? –
確實!看到我對Jon Skeet的回答和我更新的問題的評論:) – dominicbri7