나는 몇개의 서브 클래스를 가진 abstract 클래스를 가지고있다. 추상 클래스에서는 복사 생성자를 구현했습니다. 이제 복사 생성자를 사용하여 하위 클래스 중 하나를 복제하려고합니다. 어떻게해야합니까? 분명히 나는 어떤 서브 클래스를 복제해야하는지 미리 알지 못한다. 여기 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) 복사 생성자를 다루는 방법 ... 그러나 복제 방법으로 달리 할 다른 방법이 없다면, 나는 복제 방법으로 그렇게 할 것입니다. –