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

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

          Map是一個接口,HashMap是一個類。clone()方法在Object類中定義,因此我下意識認為第二行可以這么寫。結果編譯器報錯:clone()方法未定義。這個錯誤讓我很郁悶,看了半天doc才發祥原來Map是一個接口,而接口和Object類沒有任何關系,所以Map也就沒有繼承clone()。于是把代碼改成下面的樣子:

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

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

          FeedBack:
          # re: 接口與Object類的關系?
          2005-08-19 14:46 | 百年孤獨
          其實這本不應該是一個問題。

          “Object類是Java體系的單根父節點,所有Java類都從Object類繼承。”

          這句話說的很清楚了。

          Map接口中并沒有申明過 Clone方法。所以第一段代碼當然會出錯。

          你應該好好理解“類繼承”和“接口實現”這兩個基本概念。  回復  更多評論
            
          # re: 接口與Object類的關系?
          2005-08-19 15:10 | 2002PP
          當然不能調用clone方法,因為Map接口并沒有定義。
          還有interface和類是不同的,interface只能繼承interface,而不能繼承任何類。
          所以其不可能繼承Object。  回復  更多評論
            
          # re: 接口與Object類的關系?
          2005-08-20 03:35 | I love java!
          暈,我也糊涂了  回復  更多評論
            
          # re: 接口與Object類的關系?
          2005-12-16 17:40 | 我的萬花@
          呵呵,看書可不能囫圇吞棗哦~  回復  更多評論
            
          # re: 接口與Object類的關系?
          2006-05-01 23:55 | benx4-darknese
          被騙了,什么驚奇嗎,很正常的事情,但是你的說法是錯的!clone方法在object中有聲名,但是是一個接口,沒有沒有實現的情況下怎么能能調用呢?clone方法的其實在沒有override的情況下只能拷貝基本數據類型,也就是淺拷貝。  回復  更多評論
            
          # re: 接口與Object類的關系?
          2006-06-06 22:38 | Glenn
          兄弟,你這樣是測試不出來的。java是絕對多態的。
          Map map = new HashMap();
          map.clone()調用相當于HashMap.clone()也就是說調用的是從HashMap中的clone方法。但是你沒有看清楚object的文檔,class要顯式implements Clonable接口才可以調用clone方法的  回復  更多評論
            
          # re: 接口與Object類的關系?[未登錄]
          2009-08-26 21:37 | allen
          靠你掉TOSTING()絕對可以。任何的類包括實現類都是其子類。。。CLONE是沒實現而已  回復  更多評論
            
          # re: 接口與Object類的關系?
          2009-08-27 12:33 | ^ Mustang ^
          @allen
          靠,4年前的文章還有人回復……  回復  更多評論
            
          # re: 接口與Object類的關系?[未登錄]
          2014-09-30 09:42 | KK
          因為Object的clone方法是protect的,你試試那些public方法(equals、toString....)。所有的接口都會聲明Object的public方法(大多數是隱式的)。  回復  更多評論
            
          主站蜘蛛池模板: 宁乡县| 虹口区| 金川县| 武汉市| 读书| 泽州县| 余干县| 咸宁市| 巴南区| 越西县| 驻马店市| 长葛市| 呼伦贝尔市| 内乡县| 大洼县| 内江市| 辽中县| 呈贡县| 慈利县| 舟曲县| 陇南市| 咸丰县| 文安县| 察雅县| 阿拉善右旗| 南雄市| 康马县| 屏东市| 玉山县| 禹州市| 延津县| 信阳市| 仪陇县| 揭阳市| 茂名市| 武宁县| 肥西县| 松溪县| 大洼县| 柯坪县| 全州县|