gpt4 book ai didi

当类没有数据差异时,Java 实现完全从父类(super class)复制

转载 作者:行者123 更新时间:2023-11-30 04:48:32 24 4
gpt4 key购买 nike

我有一个类“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 中实现复制,并且仍然保留对象的底层类?

编辑:

如果我的想法正确,如果只有父类(super class)有一个复制方法,我会遇到的问题:

class A {
int dataMember;
public A copy() {
A ret = new A(); // !!
ret.dataMember = dataMember;
return ret;
}

}

当调用“new”时,我无法一般地确定该类是 A 的哪个子类,并且无法显式实例化该类的实例。或者有什么办法可以做到这一点?

最佳答案

您可以给A copy constructor :

class A {

public A(A other) {
//copy other's fields to this instance
}
}

A 的子类还可以公开一个构造函数,该构造函数采用 A 实例并将其传递给 super 构造函数:

class B extends A {

public B(A other) {
super(other);
}
}

关于当类没有数据差异时,Java 实现完全从父类(super class)复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com