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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

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

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

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


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

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

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

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

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

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

            回復(fù)  更多評論
            
          主站蜘蛛池模板: 出国| 江油市| 固阳县| 巴林右旗| 北宁市| 平原县| 德江县| 玉林市| 富阳市| 九江市| 句容市| 富锦市| 海兴县| 江北区| 新昌县| 象山县| 河源市| 迁西县| 永城市| 临夏县| 东乡县| 昭觉县| 报价| 德化县| 衡阳市| 永昌县| 方正县| 杭州市| 汉川市| 清远市| 北海市| 沁阳市| 梧州市| 青川县| 桃源县| 墨竹工卡县| 建德市| 泰兴市| 漠河县| 吐鲁番市| 兴义市|