你要做到這一點的主要原因是將你的代碼從界面的特定實現中解耦出來。當你寫你這樣的代碼:
List list = new ArrayList();
你的代碼的其餘部分只知道數據是List
類型,這是可取的,因爲它可以讓你的List
接口輕鬆的不同實現之間進行切換。例如,假設你正在編寫一個相當大的第三方庫,並且說你決定用LinkedList
來實現你的庫的核心。如果你的圖書館非常依賴訪問這些列表中的元素,那麼最終你會發現你做出了糟糕的設計決定;你會意識到你應該使用一個ArrayList
(它給出O(1)訪問時間)而不是LinkedList
(它給出O(n)訪問時間)。假設你已經編程到一個接口,做出這樣的改變很容易。你會簡單地改變實例的List
從,
List list = new LinkedList();
到
List list = new ArrayList();
,你知道,這將工作,因爲你寫你的代碼遵循由List
接口提供的合同。另一方面,如果你已經使用LinkedList list = new LinkedList()
實現了庫的核心,那麼做出這樣的改變就不那麼容易了,因爲不能保證其餘的代碼不能使用方法具體到LinkedList
類。總之,選擇只是設計問題......但這種設計非常重要(特別是在處理大型項目時),因爲它可以讓您在不中斷的情況下進行特定於實現的更改現有的代碼。
哦。對不起。因爲我變成了'物體',所以我忘了它。 – hqt 2012-03-24 15:44:13
@duffymo - 這個問題是問爲什麼'新列表
它不是一個重複的問題。可能的重複有通用的問題,但具體的細節。我發現標題中的這個問題與實際要求的內容更相關/同步。 – Dexters 2013-05-26 20:31:53