我有三类:爪哇 - 如何实现方法克隆为基础,派生类
类的Base extends Object
Derived1 extends Base
Derived2 extends Derived1
每个人都有自己的字段应该被克隆。我在理解实现clone
的最佳方式时遇到麻烦,并避免重复代码。我有以下架构,但看起来对我来说最差
Derived2.clone()
:它调用super.clone()
并收到Derived1
的对象。然后它调用新的Derived2(objOfDerived1)
,其调用super(objOfDerived1)
,其复制其所有字段,然后在Derived2.clone()
中复制Derived2
的所有字段。
你会怎么说呢?也许有任何文章描述这个问题?
UPD:这个想法在这里可以
class Base implements Cloneable {
private String dataOfBase;
public Base() {
}
public Base(Base base) {
this.dataOfBase = base.dataOfBase;
}
@Override
public Object clone() {
Base base = new Base();
base.dataOfBase = dataOfBase;
return base;
}
}
class Derived extends Base {
private String dataOfDerived;
public Derived(Base base) {
super(base);
}
@Override
public Object clone() {
Base base = super.clone();
Derived derived = new Derived(base);
derived.dataOfDerived = dataOfDerived;
return derived;
}
}
如果克隆一个'Derived2',你的'super.clone()来'将返回的实例'Derived2',而不是'Derived1',也不是'Object'。 – tkausl
为什么你先调用'''super.clone()''',然后调用'''new Derived2'''?我只是调用新的Derived2(this);''并在拷贝构造函数中实现拷贝。如果你不打算使用'''Object.clone()'''任何方式。 –
@JornVernee,是的,它可能更有用 – Ivan