我在Java編程語言的觀察,我們編寫以下一樣:爲什麼要將界面作爲參考?
List mylist = new ArrayList();
爲什麼我們不應該用下列代替上述嗎?
ArrayList mylist = new ArrayList();
我在Java編程語言的觀察,我們編寫以下一樣:爲什麼要將界面作爲參考?
List mylist = new ArrayList();
爲什麼我們不應該用下列代替上述嗎?
ArrayList mylist = new ArrayList();
,只是爲了避免緊耦合。你理論上應該不會將自己與實現細節聯繫在一起,因爲它們可能會發生變化,與接口契約相反,它應該是穩定的。另外,它確實簡化了測試。
您可以將界面視爲總體合同,所有實施類別必須服從。相反,特定於實現的細節可能會有所不同,比如數據如何在內部表示,訪問等等 - 您永遠不想依賴的信息。
雖然第二個選項是可行的,但第一個選項在大多數情況下更可取。通常情況下,您希望對接口進行編碼,以使您的代碼更少耦合且更有凝聚力。這是一種數據抽象,mylist(我建議myList)的用戶不關心它的實際實現,只是它是一個列表。
如果你使用ArrayList,你說它必須是一個ArrayList,而不是任何其他種類的List,並且要替換它,你將不得不改變對該類型的每個引用。如果您使用List
您清楚地表明沒有什麼特別的列表,並且它被用作普通列表。可以通過更改一行來更改爲另一個列表。
我們可能想在某些時候改變底層的數據結構,通過保持引用,我們只需要改變聲明。
Abstract Data Type
和specific implementation
的分離是object oriented programming的關鍵方面之一。
http://stackoverflow.com/questions/1686174/when-should-one-use-interfaces – Vitaly 2013-04-25 15:57:53