在初學Java的時候,經常能看到教材上的寫法,使用了接口Map來引用一個map,而不是它的具體實現,那么這樣做的好處是什么呢?
<Effective Java>第52條:通過接口引用對象
作者認為,如果有合適的接口類型存在,那么對於參數、返回值、變量和域來說,就都應該使用就接口類型進行聲明。
只有當你利用構造器創建某個對象的時候,才真正需要引用這個對象的類。
// 一個好的栗子
Map<Integer,String> map = new HashMap<>();
//一個不那么好的栗子
HashMap<Integer,String> map = new HashMap<>();
這樣做的好處在於:你的程序會更靈活。當你決定更換實現的時候,所要做的就只是:改變構造器中類的名稱。就比如:
Map<Integer,String> map = new TreeMap<>();
如果不這么做,在最早就使用了HashMap來聲明了map,如果客戶端在其他地方,使用了HashMap的操作,那么后續若改動了,則無法通過編譯了。
總結:用接口引用對象會使程序更加靈活。