2011-11-14 67 views
2

我正在阅读Effective Java,本书对克隆方法有以下评论。Java:关于克隆方法的问题

在实践中, 实现Cloneable的一类,预计将提供一个正常运作 公共克隆方法。 通常情况下,除非 所有类的超类提供良好行为的克隆实现 ,不管是公共的还是受保护的。

任何人都可以举例说明为什么不能这样做吗?

回答

3

想象一下,其中一个基类有一个专用字段,它以特定方式复制,使“克隆”在语义上有效。

如果该基类没有提供正确的克隆实现,则派生类也不能 - 它无法正确构建该专用字段。

1

基本上,如果您的类层次结构的一部分包含一个不在您控制范围内且不属于JDK(即第三方闭源类)的类,并且此类没有实现良好行为clone()方法,那么制作一个并不会特别容易。

0

在许多情况下,一个类通常写入克隆未实现。所以当写一个子类时,它同样也是用克隆编写的,并没有实现。有时需要在子类中编写一个克隆方法,但父母没有。

0
`@override 
public MyClass clone(){ 

Myclass clonedObj = super.clone(); // This is why the classtree all needs to be cloneable 

// now copy values of all members to the new obj. 
// be carefull to not copy references 
clonedobj.setMyMember(this.getMyMember()); // copy of member var; 
clonedobj.setMyotherMember(this.getMyOtherMember().clone()); // a composit obj must be cloned. 

} 
` 

这可能是anwser?