2

我正在阅读有效的 Java,这本书对克隆方法有以下评论。

在实践中,实现 Cloneable 的类有望提供正常运行的公共克隆方法。通常,除非该类的所有超类都提供行为良好的克隆实现(无论是公共的还是受保护的),否则不可能这样做。

谁能举例说明为什么不能这样做?

4

4 回答 4

3

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

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

于 2011-11-14T09:34:31.980 回答
1

基本上,如果您的类层次结构的一部分包含一个不受您控制且不属于 JDK 的类(即第 3 方闭源类),并且该类没有实现行为良好的clone()方法,那么它不是将特别容易生产一个。

于 2011-11-14T09:35:05.463 回答
0

在许多情况下,一个类通常是在没有实现克隆的情况下编写的。因此,当编写子类时,它同样是用未实现的克隆编写的。在某些时候,需要在子类中编写克隆方法,但它的父类没有。

于 2011-11-14T09:35:51.033 回答
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.

}
`

这可以是答案吗?

于 2011-11-14T09:43:50.673 回答