我知道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. 什麼是核心Java庫中繼承的最好例子?
- 2. 什麼是給定的例子最好的繼承模型
- 3. 多重繼承:什麼是一個好例子?
- 4. 什麼是C++多繼承的現實世界的例子?
- 5. Java,繼承和實例方法。爲什麼我的方法不會繼承?
- 6. 什麼是原型繼承的真實例子?
- 7. 這是一個很好的使用繼承的例子嗎?
- 8. 原型繼承。這個簡單的例子有什麼不對?
- 9. 什麼是繼承鏈中的類的良好命名約定?
- 10. 子進程繼承什麼?
- 11. 在代碼庫中量化繼承的好工具是什麼?
- 12. 什麼網站是JQuery的好例子
- 13. Java的繼承示例
- 14. 繼承的Java單例
- 15. 爲什麼java不支持多繼承?
- 16. 爲什麼Java不支持多繼承?
- 17. 什麼是JavaScript中的差異繼承?
- 18. 開源Java遊戲的一個很好的例子是什麼?
- 19. 什麼是Java Swing應用程序的好例子?
- 20. Java - 爲什麼孩子不會繼承父母變量?
- 21. 繼承Java子類
- 22. java中繼承的最高級別是什麼?
- 23. 規定Java中靜態變量繼承的規則是什麼?
- 24. 什麼設計模式是Java中的簡單繼承?
- 25. 什麼是子類從C++中的基類繼承而來?
- 26. 什麼是最好的繼承或使用公共對象?
- 27. C++中的多繼承:在C++中使用多繼承來表達圖的好方法是什麼?
- 28. Java:實例化還是繼承?
- 29. 爲什麼使用std :: tuple實現的遞歸繼承不好?
- 30. 繼承 - 爲什麼這是非法的?
感謝各位:) – Supereme 2011-03-21 04:08:15