親クラス A と、A を拡張し、A よりもいくつかのフィールドを持つサブクラス B の 2 つのクラスがあります。これらのクラスの両方を複製できるようにしたいのでclone()
、クラスからメソッドをオーバーライドしましたObject
。
クラスBは基本的にいくつかの追加フィールドを持つクラスAであるため、クラスBの実装でクラスAのクローンを使用したいと思いますclone()
。次の行に沿って何かを試しました:
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;
}
}
clone()
この方法では、A のメソッドから B のメソッドのすべての複製ロジックを複製する必要はありませんclone()
。残念ながら、Java はクラス A のオブジェクトをクラス B のオブジェクトにキャストすることを許可していないため、これは機能しません。これを行う方法についての回答を探しましたが、クローン作成ロジックを再利用する方法はないようですA. これは、別のフィールドを A に追加するたびに、このフィールドのコピーをすべてのサブクラスのclone()
メソッドに手動で追加する必要があるということですか。これは非常にエラーが発生しやすいようです...