J'ai besoin de cloner une sous-classe en Java, mais au point où cela se produit, je ne connaîtrai pas le type de la sous-classe, seulement la super classe. Quel est le meilleur modèle de conception pour ce faire?Sous-classes de clonage en Java
Exemple:
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 }
}
}
Non, cela ne fonctionne pas. Essayez ceci: Barre de barre = nouvelle barre(); Foo foo = bar; foo.copy(). Il va appeler Foo.copy(), pas Bar.copy() – ccleve
@ user237815 Je ne pense pas. 'Bar.copy' remplace (vérifiée avec' @ Override') 'Foo.copy'. –
Tom a raison. L'appel de 'copy' se produit au moment de l'exécution et la machine virtuelle Java appellera la méthode' copy' appropriée en fonction du type de l'objet. –