- 我有幾種方法的抽象類:
- 我有延長上述 類的幾個子類
- 我有一個集合
<MyAbstractClass>
集合充滿了我的主類中的子類的新對象 - 我有一個獨特的方法之一,我希望執行一個覆蓋我通常調用的方法的子類。
即如果條件爲,而不是通常collection.get(i).method();
其中i
是索引真,執行collection.get(i).specificMethod();
任何人都可以點我到正確的主題,進一步研究?另外,對我的情況有一點洞察力會產生奇蹟。
<MyAbstractClass>
集合充滿了我的主類中的子類的新對象即如果條件爲,而不是通常collection.get(i).method();
其中i
是索引真,執行collection.get(i).specificMethod();
任何人都可以點我到正確的主題,進一步研究?另外,對我的情況有一點洞察力會產生奇蹟。
這聽起來像你想instanceof
:
for (AbstractThing thing : yourCollection) {
if (thing instanceof SubclassWithSpecialMethod) {
((SubclassWithSpecialMethod)thing).specialMethod();
}
else {
thing.method();
}
}
雖然也有instanceof
完全合法的用途,如果你發現你使用它(特別是如果你使用了很多),有時指最好退一步看看更大的圖片,看看是否有某種方式可以重新組織,以免不這樣做。
在這種情況下,例如,也許抽象類可以有method
,然後在出現的特殊行爲的子類可以覆蓋method
與特殊行爲,所以呼叫者只需撥打method
和多態性踢給它當你處理特定的子類時的特殊行爲。
檢查條件method()
,如果符合,請從那裏自行撥打specificMethod()
。根據你的描述,這隻適用於某些子類。
如果您正在檢查外部條件,請將標誌傳遞給method()
以指示是否應該調用同一個實例的specificMethod()
。
重新考慮你的方法。在抽象類中創建一個方法,例如'specificActions()'並在每個子類中實現它。 – Keppil