Necesito clonar una subclase en Java, pero en el punto donde ocurre esto, no sabré el tipo de subclase, solo la superclase. ¿Cuál es el mejor patrón de diseño para hacer esto?Subclases de clonación en Java
Ejemplo:
class Foo {
String myFoo;
public Foo(){}
public Foo(Foo old) {
this.myFoo = old.myFoo;
}
}
class Bar extends Foo {
String myBar;
public Bar(){}
public Bar(Bar old) {
super(old); // copies myFoo
this.myBar = old.myBar;
}
}
class Copier {
Foo foo;
public Foo makeCopy(Foo oldFoo) {
// this doesn't work if oldFoo is actually an
// instance of Bar, because myBar is not copied
Foo newFoo = new Foo(oldFoo);
return newFoo;
// unfortunately, I can't predict what oldFoo's the actual class
// is, so I can't go:
// if (oldFoo instanceof Bar) { // copy Bar here }
}
}
No, no funciona. Pruebe esto: Bar bar = new Bar(); Foo foo = bar; foo.copy(). Invocará Foo.copy(), no Bar.copy() – ccleve
@ user237815 No lo creo. 'Bar.copy' reemplaza (marcada con' @ Override') 'Foo.copy'. –
Tom es correcto. La invocación de 'copy' ocurre en el tiempo de ejecución y la JVM llamará al método apropiado de 'copia' en función del tipo del objeto. –