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