隨筆 - 11  文章 - 33  trackbacks - 0
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

                 今天看了一下java里的clone,在實驗中留意到一個問題:如果一個類不重寫clone()方法,那么根本無法調用clone()方法。這讓我感到困惑,Object類里面寫了protected clone(),而java里所有類都是繼承Object,為什么它們沒法繼承Object的clone()方法呢?希望哪位好心人能解釋下,感激不盡!

                 再一個就是深clone和淺clone,個人覺得淺clone不能算真正意義上的clone。而深clone太麻煩了,它必須保證類的非原始類型屬性也是cloneable的,屬性的屬性也是一樣,不光要cloneable,還要在實現clone()方法時一個一個的clone。如果一個類的非原始類型的屬性又多又深,基本上,這個類就是uncloneable了!

                  需要說明的是,以上所說的“非原始類型”不包含String,因為String的實例是不可變的,它無需被clone。


                  以上的想法還很不成熟,希望各位大蝦能指點指點
          posted on 2007-09-18 11:25 teasp 閱讀(486) 評論(4)  編輯  收藏 所屬分類: Java學習

          FeedBack:
          # re: java里的clone 2007-09-18 12:07 teasp
          又看了一下,ArrayList是淺clone  回復  更多評論
            
          # re: java里的clone 2007-09-19 10:20 zht
          不是不能繼承Object的clone方法,是如果要想進行復制,必須得實現cloneable接口才可以,這個接口表明類可用clone進行復制  回復  更多評論
            
          # re: java里的clone 2007-09-19 11:56 teasp
          非常感謝樓上的回復,雖然你說的我知道。應該是我沒表述清楚,第一段里的“沒法繼承”應該是“沒有繼承”。我的意思是由于其他類都是繼承Object,所以應該繼承了Object的clone()方法,只是如果這個類沒有實現cloneable的話,在調用clone()時會拋異常。而實際情況是,如果沒有實現cloneable并重寫clone()方法,壓根就沒clone()方法可以調用,這很奇怪。  回復  更多評論
            
          # re: java里的clone[未登錄] 2007-09-22 14:16 Eric

          “而實際情況是,如果沒有實現cloneable并重寫clone()方法,壓根就沒clone()方法可以調用,這很奇怪。”

          盡信書不如無書啊,說實話core java 7th vol1的翻譯實在是不敢恭維。
          請看下面的代碼:

          class Employee implements Cloneable throws CloneNotSupportedException
          {
          public Employee getEmployee()
          {
          return (Employee)clone();
          }
          }

          首先要使Employee支持克隆,必須實現Cloneable接口。
          genEmployee方法實現的淺克隆跟覆蓋Object類的clone方法效果是一樣的。
          只不過clone這個名字是大家所遵循的,僅此而已。

            回復  更多評論
            
          主站蜘蛛池模板: 莱西市| 舟山市| 乐都县| 荣成市| 万荣县| 渭南市| 安庆市| 泾川县| 铁岭县| 望都县| 安徽省| 淅川县| 沙坪坝区| 定陶县| 昌乐县| 蒙城县| 保德县| 柯坪县| 盈江县| 雷波县| 嘉禾县| 奈曼旗| 温泉县| 博罗县| 洮南市| 曲麻莱县| 鄂州市| 桃园市| 上虞市| 安西县| 吉林省| 永兴县| 丽江市| 洪洞县| 荣成市| 景德镇市| 弥渡县| 平山县| 鸡东县| 赤壁市| 莱州市|