我有一個叫Base
類,它有一個名爲方法。大約有100個類從這個基類派生,並提供他們自己的的實現。現在,我有一些我想要在Base.SomeMethod()
中輸入的常用邏輯。該方法需要在的末尾調用。我的問題是否可以在不更改每個派生類的方法的情況下調用此方法?如何調用基類方法不改變所有派生類
回答
public class Base {
public final void execute() {
doExecute();
someMethod();
}
protected abstract void doExecute();
public void someMethod() {
}
}
此解決方案可防止super code smell。
是的,但你必須改變呼叫者。調用者必須調用doExecute()
(儘管找到一個更好的名字)方法,您在基類中將其定義爲final,並調用,然後調用通用代碼。
另一種選擇是面向方面的編程,但我不會推薦它用於此目的,也就是要「破解」代碼。
的問題是:爲什麼在100個左右的類別這樣的問題改變方法的名字嗎?這是使用IDE單擊鼠標。
不是我所知道的。下一次你應該考慮你可能想爲所有擴展類添加一些常見的操作,並且要求super.execute()
!
只能通過使用代表您的代碼的東西;這對純Java來說是不可能的。
讓我說出你的問題,我的理解:動物類有有執行和因繼承所有子類有這個會員呼吸()方法,除非有呼吸的人非常不同的方式將覆蓋。
現在,在呼氣的方法結束時,你要調用CloseEyes()動物類的方法,並且可以是部分或全部子類覆蓋CloseEyes()方法,這是事實。
所以你的問題:每當你想他們CloseEyes但是從動物類,而不是從派生類的任何動物的氣息。
如果已經有CloseEyes()在許多派生類中的方法,那麼你實際上是做一些錯誤調用基類的CloseEyes()。
如果你仍然只想調用基類的方法,那麼爲什麼你需要相同的方法名稱 - 你只是說AnimalEyeClose(),使其成爲私人的,並在動物類中。
我什麼時候說我想用同名的方法? – Asha 2012-04-06 05:18:55
- 1. 派生類如何調用基類的私有方法?
- 2. 如何從派生類方法調用基類方法?
- 3. C++如何從多個派生類調用基類方法?
- 4. C++如何從基類中調用派生類中的方法
- 5. 如何從C++派生類調用基類方法?
- 6. CRTP - 如何從派生類調用基類的實現方法?
- 7. 如何調用被覆蓋的方法,所有派生類
- 8. 派生類沒有調用基類的方法
- 9. 從靜態基類方法調用靜態派生類方法
- 10. 從派生類方法調用基類方法
- 11. 派生類的方法從基類調用方法
- 12. 爲什麼調用基類方法代替派生類方法?
- 13. 如何調用通過基類指針基類方法指向派生類
- 14. C++繼承:派生類指向基類調用Derived類方法
- 15. 如何修改所有派生類中的方法返回值?
- 16. C++無法從派生類中調用基類方法
- 17. 無法從派生類中調用基類方法
- 18. C# - 使所有派生類調用基類構造函數
- 19. 派生的方法在基類不叫
- 20. 基類方法返回派生類objec
- 21. 在基類中調用派生類方法
- 22. C++調用派生類中基類的模板方法
- 23. 從基抽象類(反射)調用派生類方法
- 24. 從基類參考調用派生類的方法
- 25. 從派生類中調用C#基類擴展方法?
- 26. 從基類調用派生類構面的方法嗎?
- 27. 的Java:調用從第二派生類的基類方法
- 28. 從派生類對象調用基類方法
- 29. 通過基類的ptr調用派生類的方法
- 30. 已解決:從基類內調用派生類方法?
我必須將所有派生類從執行更改爲doExecute正確嗎? – Asha 2012-04-05 18:38:01
@Asha是的,但大多數IDEs會讓所有的方法一次改變,所以它不應該是一個大問題。 – Jeffrey 2012-04-05 18:39:53