1
Map map = new HashMap();
2
map.clone();

2

Map是一個(gè)接口,HashMap是一個(gè)類(lèi)。clone()方法在Object類(lèi)中定義,因此我下意識(shí)認(rèn)為第二行可以這么寫(xiě)。結(jié)果編譯器報(bào)錯(cuò):clone()方法未定義。這個(gè)錯(cuò)誤讓我很郁悶,看了半天doc才發(fā)祥原來(lái)Map是一個(gè)接口,而接口和Object類(lèi)沒(méi)有任何關(guān)系,所以Map也就沒(méi)有繼承clone()。于是把代碼改成下面的樣子:
1
HashMap map = new HashMap();
2
map.clone();

2

這樣就可以了。
兄弟,你這樣是測(cè)試不出來(lái)的。java是絕對(duì)多態(tài)的。
Map map = new HashMap();
map.clone()調(diào)用相當(dāng)于HashMap.clone()也就是說(shuō)調(diào)用的是從HashMap中的clone方法。但是你沒(méi)有看清楚object的文檔,class要顯式implements Clonable接口才可以調(diào)用clone方法的