今天凌晨coding的時(shí)候發(fā)現(xiàn)一個(gè)很有趣的現(xiàn)象。“Object類(lèi)是Java體系的單根父節(jié)點(diǎn),所有Java類(lèi)都從Object類(lèi)繼承。”這句話是大部分green hand都知道的Java金句,毋庸置疑。那如果我問(wèn)你接口和Object類(lèi)的關(guān)系呢?答案是“沒(méi)有關(guān)系”。請(qǐng)看下面的代碼:
1
Map map = new HashMap();
2
map.clone();
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();
這樣就可以了。
兄弟,你這樣是測(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方法的
posted on 2007-08-16 14:50
冬天出走的豬 閱讀(775)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
j2se