午夜拍鍵驚奇
          子夜 編程 代碼與我同在
          posts - 48,comments - 118,trackbacks - 79
          今天凌晨coding的時(shí)候發(fā)現(xiàn)一個(gè)很有趣的現(xiàn)象。“Object類是Java體系的單根父節(jié)點(diǎn),所有Java類都從Object類繼承。”這句話是大部分green hand都知道的Java金句,毋庸置疑。那如果我問(wèn)你接口和Object類的關(guān)系呢?答案是“沒(méi)有關(guān)系”。請(qǐng)看下面的代碼:

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

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

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

          這樣就可以了。
          posted on 2005-08-19 13:53 ^ Mustang ^ 閱讀(2437) 評(píng)論(9)  編輯  收藏 所屬分類: Java 點(diǎn)滴

          FeedBack:
          # re: 接口與Object類的關(guān)系?
          2005-08-19 14:46 | 百年孤獨(dú)
          其實(shí)這本不應(yīng)該是一個(gè)問(wèn)題。

          “Object類是Java體系的單根父節(jié)點(diǎn),所有Java類都從Object類繼承。”

          這句話說(shuō)的很清楚了。

          Map接口中并沒(méi)有申明過(guò) Clone方法。所以第一段代碼當(dāng)然會(huì)出錯(cuò)。

          你應(yīng)該好好理解“類繼承”和“接口實(shí)現(xiàn)”這兩個(gè)基本概念。  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2005-08-19 15:10 | 2002PP
          當(dāng)然不能調(diào)用clone方法,因?yàn)镸ap接口并沒(méi)有定義。
          還有interface和類是不同的,interface只能繼承interface,而不能繼承任何類。
          所以其不可能繼承Object。  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2005-08-20 03:35 | I love java!
          暈,我也糊涂了  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2005-12-16 17:40 | 我的萬(wàn)花@
          呵呵,看書(shū)可不能囫圇吞棗哦~  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2006-05-01 23:55 | benx4-darknese
          被騙了,什么驚奇嗎,很正常的事情,但是你的說(shuō)法是錯(cuò)的!clone方法在object中有聲名,但是是一個(gè)接口,沒(méi)有沒(méi)有實(shí)現(xiàn)的情況下怎么能能調(diào)用呢?clone方法的其實(shí)在沒(méi)有override的情況下只能拷貝基本數(shù)據(jù)類型,也就是淺拷貝。  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2006-06-06 22:38 | Glenn
          兄弟,你這樣是測(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方法的  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?[未登錄](méi)
          2009-08-26 21:37 | allen
          靠你掉TOSTING()絕對(duì)可以。任何的類包括實(shí)現(xiàn)類都是其子類。。。CLONE是沒(méi)實(shí)現(xiàn)而已  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?
          2009-08-27 12:33 | ^ Mustang ^
          @allen
          靠,4年前的文章還有人回復(fù)……  回復(fù)  更多評(píng)論
            
          # re: 接口與Object類的關(guān)系?[未登錄](méi)
          2014-09-30 09:42 | KK
          因?yàn)镺bject的clone方法是protect的,你試試那些public方法(equals、toString....)。所有的接口都會(huì)聲明Object的public方法(大多數(shù)是隱式的)。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 宁蒗| 丰顺县| 泾阳县| 天柱县| 东平县| 景洪市| 孝义市| 天气| 泰宁县| 夏津县| 安福县| 凤翔县| 金昌市| 灵宝市| 滦平县| 烟台市| 延安市| 颍上县| 澜沧| 仙游县| 弥勒县| 北京市| 六盘水市| 安义县| 轮台县| 奉贤区| 会理县| 扎赉特旗| 华容县| 疏勒县| 固安县| 普陀区| 吉安市| 绍兴市| 陆丰市| 颍上县| 海林市| 依安县| 西乌珠穆沁旗| 佛教| 伊通|