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

          常用鏈接

          留言簿(1)

          隨筆分類(lèi)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

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

                  需要說(shuō)明的是,以上所說(shuō)的“非原始類(lèi)型”不包含String,因?yàn)镾tring的實(shí)例是不可變的,它無(wú)需被clone。


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

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

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

          盡信書(shū)不如無(wú)書(shū)啊,說(shuō)實(shí)話core java 7th vol1的翻譯實(shí)在是不敢恭維。
          請(qǐng)看下面的代碼:

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

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

            回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 尼勒克县| 台山市| 赫章县| 锡林浩特市| 沙田区| 获嘉县| 板桥市| 丹棱县| 海盐县| 嘉荫县| 文登市| 冀州市| 驻马店市| 体育| 瓦房店市| 江永县| 咸阳市| 慈溪市| 贡山| 曲阜市| 金昌市| 宕昌县| 贵阳市| 那曲县| 桃江县| 闽侯县| 沈阳市| 故城县| 和平县| 庆元县| 邯郸县| 锦屏县| 长乐市| 海原县| 金溪县| 南投市| 繁峙县| 惠州市| 赫章县| 天峻县| 高邑县|