可能重複:
Type List vs type ArrayList in Java使用接口,而不是CLASSE聲明時,一些對象
我正在學習Java語言,我看到它聲明某個對象時,他們使用的接口部分代碼作爲基本類型,但用完整的類進行初始化。
例如:
Map<String,String> map = new HashMap<String,String>();
那麼,什麼是要使用的接口,而不是地圖上的對象聲明的類HashMap中的原因是什麼?
可能重複:
Type List vs type ArrayList in Java使用接口,而不是CLASSE聲明時,一些對象
我正在學習Java語言,我看到它聲明某個對象時,他們使用的接口部分代碼作爲基本類型,但用完整的類進行初始化。
例如:
Map<String,String> map = new HashMap<String,String>();
那麼,什麼是要使用的接口,而不是地圖上的對象聲明的類HashMap中的原因是什麼?
使用接口的想法是允許程序使用任何Map實現。原則上你可能希望稍後用-say-一個TreeMap來替換HashMap,如果程序的其餘部分只假定它是一個Map,那麼這個替換是很簡單的。
如果程序員宣稱map
爲HashMap
那麼程序員可能會無意中使用som HashMap
特定的方法或字段。然後程序員會被卡在使用HashMap
。
事實上,程序員可以很容易地將其從HashMap
更改爲任何其他種類的Map
。
你不能實例化一個接口。這是一個契約,它說「我在這裏使用的任何類將實現在接口中聲明的方法」。這是java解決缺乏多重繼承的方法。
@Mathias和@emory對於通常以Map = new HashMap這種方式完成的原因是正確的,無論使用何種類創建實際的地圖,都可以通過TreeMap,HashMap,BidiMap或其他方式自由實現。
我不認爲有任何HashMap的具體方法,我不認爲有任何暴露的領域。集合接口的實現主要根據其性能語言不同而不同。 – 2012-03-14 22:27:59