随笔 - 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 阅读(470) 评论(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这个名字是大家所遵循的,仅此而已。

  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: