我知道Java中繼承的優點,但是我也有點難以接受它也有缺點。任何人都可以給我一個在Java中繼承的壞例子嗎?什麼是Java中繼承的不好的例子?
回答
Stack extends Vector
。堆棧不是矢量。Properties extends Hashtable
。屬性表不是哈希表。
請參閱this answer以獲取Effective Java的引用。
這是很容易寫的Stack
執行使用什麼是Vector
(同樣爲Properties
)已經實現,但它造成的問題 - see here
一個例子是實現constant interfaces(一個只包含不可變字段的接口)的舊模式,那麼爲了方便起見,希望使用這些常量的類將實現此接口。問題是你的類現在繼承了這個接口的API,並且它的設計的擴展可能會在未來損害你的API。
以這種方式使用常量接口現在通常被認爲是反模式。從Java 5開始,您可以使用enums而不是定義常量的接口,而不是定義常量接口。
從Effective Java by Josh Bloch:
恆定接口圖案是不良使用接口。一個類內部使用一些常量是一個實現細節。實現一個常量接口會導致此實現細節泄漏到該類的導出API中。
哇,我很高興我從未在我的各種brownfield軟件項目中遇到過...... – David 2011-03-20 12:43:15
我相信只要遵循「是 - 一個」的指導原則,實施它的人就會理解它,並且不會弄亂它,實際上沒有任何缺點。
有談論使用的繼承與一個相當不錯的文章here Java中的組合,包括什麼時候以及爲什麼要使用這些組件的例子。還有一個採訪here討論了這個問題(引用Gang of Four法令「贊成組合繼承」)。
這是一個非常廣泛的,至少對我來說,實際上很有趣的主題。許多初學者程序員得到了一些繼承,並開始了一個糟糕的設計路徑,並不總是瞭解多態性是如何工作的,以及他們可以利用哪些設計模式和技術來編寫更好的軟件。如果你是一個面向對象的編程,你永遠無法瞭解太多關於多態性,接口,繼承,組成,抽象等
不成熟狀態就是使用 一個人的智力沒有他人 指導無能。 康德
如果你說:「這是你難以接受,它有不利的地方。「,那麼我理解爲 - 你知道不利因素,你有一些道德衝突或思想混亂,質疑你的知識性質。」聽「和」聽「是兩回事,我不能做你明白,如果你不嘗試自己
如果你想了解,嘗試讀一本書,例如:
- 有效的Java(項目16):在繼承 青睞組成(Link )
- 1. 多重繼承:什麼是一個好例子?
- 2. 原型繼承。這個簡單的例子有什麼不對?
- 3. 這是一個很好的使用繼承的例子嗎?
- 4. 繼承的Java單例
- 5. Java的繼承示例
- 6. 在代碼庫中量化繼承的好工具是什麼?
- 7. 爲什麼java不支持多繼承?
- 8. 什麼網站是JQuery的好例子
- 9. 開源Java遊戲的一個很好的例子是什麼?
- 10. 什麼是Java Swing應用程序的好例子?
- 11. Java - 爲什麼孩子不會繼承父母變量?
- 12. 繼承Java子類
- 13. 規定Java中靜態變量繼承的規則是什麼?
- 14. java中繼承的最高級別是什麼?
- 15. 什麼是最好的繼承或使用公共對象?
- 16. Java:實例化還是繼承?
- 17. C++中的多繼承:在C++中使用多繼承來表達圖的好方法是什麼?
- 18. 爲什麼使用std :: tuple實現的遞歸繼承不好?
- 19. Java中的繼承
- 20. 繼承 - 爲什麼這是非法的?
- 21. 什麼是go lang的虛擬繼承?
- 22. 繼承類結構是什麼樣的?
- 23. 繼承的相反部分是什麼?
- 24. Java克隆繼承示例
- 25. Java中的WS-Eventing客戶端的一些很好的例子是什麼?
- 26. java類繼承和javabean繼承之間有什麼區別?
- 27. 爲什麼我的Python繼承/超級示例不起作用?
- 28. Unity3D - 子對象從父對象繼承的是什麼?
- 29. 繼承子類時的默認保護級別是什麼?
- 30. 繼承和java豆有什麼區別?
感謝各位:) – Supereme 2011-03-21 04:08:15