我正在阅读有效的 Java,这本书对克隆方法有以下评论。
在实践中,实现 Cloneable 的类有望提供正常运行的公共克隆方法。通常,除非该类的所有超类都提供行为良好的克隆实现(无论是公共的还是受保护的),否则不可能这样做。
谁能举例说明为什么不能这样做?
我正在阅读有效的 Java,这本书对克隆方法有以下评论。
在实践中,实现 Cloneable 的类有望提供正常运行的公共克隆方法。通常,除非该类的所有超类都提供行为良好的克隆实现(无论是公共的还是受保护的),否则不可能这样做。
谁能举例说明为什么不能这样做?
想象一下,其中一个基类有一个私有字段,该字段要以特定方式复制,以使“克隆”在语义上有效。
如果该基类没有提供正确的克隆实现,则派生类也不能 - 它无法正确构建该私有字段。
基本上,如果您的类层次结构的一部分包含一个不受您控制且不属于 JDK 的类(即第 3 方闭源类),并且该类没有实现行为良好的clone()
方法,那么它不是将特别容易生产一个。
在许多情况下,一个类通常是在没有实现克隆的情况下编写的。因此,当编写子类时,它同样是用未实现的克隆编写的。在某些时候,需要在子类中编写克隆方法,但它的父类没有。
`@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.
}
`
这可以是答案吗?