私はいくつかのサブクラスを持つ抽象クラスを持っています。抽象クラスでは、コピーコンストラクタを実装しました。今、コピーコンストラクタを使用してサブクラスの1つを複製したいのですが、どのようにすればいいですか?明らかに、私はどのサブクラスをクローン化しなければならないかを事前に知らない。ここでJavaで親抽象コピーコンストラクタを使用してサブクラスをコピーするにはどうすればよいですか?
は、私が何をしたいの例です。
abstract class AbstractClass {
public AbstractClass(AbstractClass ac) {
this();
setX(ac.getX());
setY(ac.getY());
}
// Some setter and getter for X and Y variables
}
class SubclassA extends AbstractClass {
public SubclassA(SubclassA a) {
super(a);
}
}
class SubclassB extends AbstractClass {
public SubclassB(SubclassB b) {
super(b);
}
}
public class Main {
public static void main(String[] args) {
AbstractClass a = new SubclassA();
AbstractClass b = new SubclassB();
// Get a copy of "a" or "b" using the copy constructor of abstract class
AbstractClass newA = AbstractClass(a);
AbstractClass newB = AbstractClass(b);
}
}
なぜ、 'clone()'を使わないのですか( 'Cloneable'を実装してください)?それは 'AbstractClass newA = a.clone()'であり、共変な戻り値型では、 'SubclassA'メソッドは' AbstractClass'の代わりに 'SubclassA'の戻り値型を持つことができます。 – Thomas
サブクラスの実装の詳細がわからないため、スーパークラスのCopyconstructorを使用することはできません。サブクラスのcopyconstructorを使用するか、 'clone()'を使用してください –
[他のコメントによると、クローンはお勧めしません。](http://stackoverflow.com/questions/4081858/about-java-cloneable) コピーコンストラクタを扱うには...しかし、そうでなければクローンメソッドで行う方法がないなら、私はクローンメソッドでそれを行います。 –