【发布时间】:2012-08-26 03:43:10
【问题描述】:
我有两个类:父类 A 和一些子类 B,它扩展了 A 并且比 A 多了几个字段。我希望能够克隆这两个类,所以我重写了 clone() 方法Object 类。
由于 B 类基本上是带有一些额外字段的 A 类,因此我想在 B 类的 clone() 实现中使用 A 类的克隆。我尝试了以下内容:
public class A
{
public Object clone()
{
A cloneA = new A();
cloneA.foo = this.foo;
cloneA.bar = this.bar;
return cloneA;
}
}
public class B extends B
{
public Object clone()
{
Object cloneA = super.clone();
B cloneB = (B)cloneA;
cloneB.fieldSpecificForB = this.fieldSpecificForB;
return cloneB;
}
}
这样我就不必在 B 的 clone() 方法中复制 A 的 clone() 方法中的所有克隆逻辑。不幸的是,这不起作用,因为 Java 不允许将 A 类的对象强制转换为 B 类的对象。我四处寻找有关如何执行此操作的答案,但似乎没有办法重用来自的克隆逻辑A.这是否意味着每次我在A中添加另一个字段时,我都必须手动将这个字段的复制添加到所有子类的clone()方法中。这似乎很容易出错...
【问题讨论】:
-
就像@Mathias 建议的那样,问题是B 没有扩展A 类。如果您无法扩展,那么您应该进行复制。
-
我看到我在原始帖子中省略了一些代码。我对其进行了更改,以更接近于我在代码中尝试执行的操作。
标签: java inheritance clone