我有三類:爪哇 - 如何實現方法克隆爲基礎,派生類
類的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