2013-04-25 61 views
-1

我在Java編程語言的觀察,我們編寫以下一樣:爲什麼要將界面作爲參考?

List mylist = new ArrayList();

爲什麼我們不應該用下列代替上述嗎?

ArrayList mylist = new ArrayList(); 
+0

http://stackoverflow.com/questions/1686174/when-should-one-use-interfaces – Vitaly 2013-04-25 15:57:53

回答

0

,只是爲了避免緊耦合。你理論上應該不會將自己與實現細節聯繫在一起,因爲它們可能會發生變化,與接口契約相反,它應該是穩定的。另外,它確實簡化了測試。

您可以將界面視爲總體合同,所有實施類別必須服從。相反,特定於實現的細節可能會有所不同,比如數據如何在內部表示,訪問等等 - 您永遠不想依賴的信息。

1

雖然第二個選項是可行的,但第一個選項在大多數情況下更可取。通常情況下,您希望對接口進行編碼,以使您的代碼更少耦合且更有凝聚力。這是一種數據抽象,mylist(我建議myList)的用戶不關心它的實際實現,只是它是一個列表。

0

如果你使用ArrayList,你說它必須是一個ArrayList,而不是任何其他種類的List,並且要替換它,你將不得不改變對該類型的每個引用。如果您使用List您清楚地表明沒有什麼特別的列表,並且它被用作普通列表。可以通過更改一行來更改爲另一個列表。

1

我們可能想在某些時候改變底層的數據結構,通過保持引用,我們只需要改變聲明。