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

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

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

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

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

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

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

          這句話說的很清楚了。

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

          你應(yīng)該好好理解“類繼承”和“接口實現(xiàn)”這兩個基本概念。  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2005-08-19 15:10 | 2002PP
          當(dāng)然不能調(diào)用clone方法,因為Map接口并沒有定義。
          還有interface和類是不同的,interface只能繼承interface,而不能繼承任何類。
          所以其不可能繼承Object。  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2005-08-20 03:35 | I love java!
          暈,我也糊涂了  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2005-12-16 17:40 | 我的萬花@
          呵呵,看書可不能囫圇吞棗哦~  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2006-05-01 23:55 | benx4-darknese
          被騙了,什么驚奇嗎,很正常的事情,但是你的說法是錯的!clone方法在object中有聲名,但是是一個接口,沒有沒有實現(xiàn)的情況下怎么能能調(diào)用呢?clone方法的其實在沒有override的情況下只能拷貝基本數(shù)據(jù)類型,也就是淺拷貝。  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2006-06-06 22:38 | Glenn
          兄弟,你這樣是測試不出來的。java是絕對多態(tài)的。
          Map map = new HashMap();
          map.clone()調(diào)用相當(dāng)于HashMap.clone()也就是說調(diào)用的是從HashMap中的clone方法。但是你沒有看清楚object的文檔,class要顯式implements Clonable接口才可以調(diào)用clone方法的  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?[未登錄]
          2009-08-26 21:37 | allen
          靠你掉TOSTING()絕對可以。任何的類包括實現(xiàn)類都是其子類。。。CLONE是沒實現(xiàn)而已  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?
          2009-08-27 12:33 | ^ Mustang ^
          @allen
          靠,4年前的文章還有人回復(fù)……  回復(fù)  更多評論
            
          # re: 接口與Object類的關(guān)系?[未登錄]
          2014-09-30 09:42 | KK
          因為Object的clone方法是protect的,你試試那些public方法(equals、toString....)。所有的接口都會聲明Object的public方法(大多數(shù)是隱式的)。  回復(fù)  更多評論
            
          主站蜘蛛池模板: 高青县| 朔州市| 桂阳县| 稻城县| 昌乐县| 高尔夫| 景德镇市| 辉县市| 大城县| 昔阳县| 光泽县| 天门市| 莲花县| 霍林郭勒市| 浏阳市| 平阴县| 东乌珠穆沁旗| 伊春市| 博乐市| 琼结县| 常州市| 呼伦贝尔市| 河池市| 邳州市| 和政县| 开封县| 米林县| 东至县| 德昌县| 平遥县| 井冈山市| 靖远县| 海阳市| 图木舒克市| 新余市| 资兴市| 湖北省| 桐柏县| 盱眙县| 富阳市| 杭州市|