2011-03-20 53 views

回答

7
  • Stack extends Vector。堆棧不是矢量。
  • Properties extends Hashtable。屬性表不是哈希表。

請參閱this answer以獲取Effective Java的引用。

這是很容易寫的Stack執行使用什麼是Vector(同樣爲Properties)已經實現,但它造成的問題 - see here

5

一個例子是實現constant interfaces(一個只包含不可變字段的接口)的舊模式,那麼爲了方便起見,希望使用這些常量的類將實現此接口。問題是你的類現在繼承了這個接口的API,並且它的設計的擴展可能會在未來損害你的API。

以這種方式使用常量接口現在通常被認爲是反模式。從Java 5開始,您可以使用enums而不是定義常量的接口,而不是定義常量接口。

Effective Java by Josh Bloch:

恆定接口圖案是不良使用接口。一個類內部使用一些常量是一個實現細節。實現一個常量接口會導致此實現細節泄漏到該類的導出API中。

+0

哇,我很高興我從未在我的各種brownfield軟件項目中遇到過...... – David 2011-03-20 12:43:15

1

我相信只要遵循「是 - 一個」的指導原則,實施它的人就會理解它,並且不會弄亂它,實際上沒有任何缺點。

4

有談論使用的繼承與一個相當不錯的文章here Java中的組合,包括什麼時候以及爲什麼要使用這些組件的例子。還有一個採訪here討論了這個問題(引用Gang of Four法令「贊成組合繼承」)。

這是一個非常廣泛的,至少對我來說,實際上很有趣的主題。許多初學者程序員得到了一些繼承,並開始了一個糟糕的設計路徑,並不總是瞭解多態性是如何工作的,以及他們可以利用哪些設計模式和技術來編寫更好的軟件。如果你是一個面向對象的編程,你永遠無法瞭解太多關於多態性,接口,繼承,組成,抽象等

1

不成熟狀態就是使用 一個人的智力沒有他人 指導無能。 康德

如果你說:「這是你難以接受,它有不利的地方。「,那麼我理解爲 - 你知道不利因素,你有一些道德衝突或思想混亂,質疑你的知識性質。」聽「和」聽「是兩回事,我不能做你明白,如果你不嘗試自己

如果你想了解,嘗試讀一本書,例如:

  • 有效的Java(項目16):在繼承 青睞組成(Link