我有几个“A”类的子类,比如 B、C 和 D。我将其中几个存储在一个泛型中
ArrayList<A> stuff;
B、C 和 D 与 A 完全没有不同的数据成员。它们不同的唯一方式是通过不同的覆盖方法。我希望能够将 A 类的任何实例复制到 A 类的另一个实例(同时保留真正的子类)
就像是:
A obj1 = (A)new B(...)
A obj2 = (A)new C(...)
A obj3 = obj1.copy();
// (obj3 instanceof B) == true
通常这需要 B、C 和 D 来实现自定义复制方法。但是,这似乎是一种浪费,因为数据成员完全相同,并且它们只会存在以便保留类。
有什么办法可以让我只在 A 类中实现复制,并且仍然保留对象的底层类?
编辑:
如果我的想法是正确的,如果只有超类有一个复制方法,我会遇到的问题:
class A {
int dataMember;
public A copy() {
A ret = new A(); // !!
ret.dataMember = dataMember;
return ret;
}
}
当调用“new”时,我一般无法确定该类是 A 的哪个子类,并进一步显式实例化该类的实例。或者有没有办法做到这一点?