我正在尝试实现派生类的克隆,但是,我没有得到,我不知道为什么。 为什么我不能克隆 B 类?,我得到一个 CastClassExpcetion。
public class A implements Cloneable {
private Integer a;
@Override
protected Object clone() throws CloneNotSupportedException {
A clone = new A(); //Why if I do this instance of super.clone() I get an exception?
A clone = (A) super.clone();
clone.a = this.a;
return clone;
}
..
}
public class B extends A implements Cloneable {
private String b;
..
@Override
protected Object clone() throws CloneNotSupportedException {
B clone = (B) super.clone();
clone.b = this.b;
return clone;
}
public static void main(String[] args) throws CloneNotSupportedException {
B b = new B(1, "s");
B clone = b.clone();
}
}
最佳答案
您在 clone()
方法中错误地返回了 a
和 b
。这会导致 B.clone()
出现异常,因为您无法将整数转换为 B
。
要修复此问题,只需确保返回您的clone
变量即可。
另请注意,字段值会自动复制到您的克隆对象。不需要将字段值分配给您的克隆,除非它们是可变的并且您希望防御性地复制它们。在您的克隆方法中,您有这些多余的行:
clone.a = this.a;
和
clone.b = this.b;
您可以从 B.clone()
方法中删除这两行,因为字符串和整数是不可变的。
关于java - 克隆派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25679759/