Ich muss eine Unterklasse in Java klonen, aber an dem Punkt im Code, wo dies passiert, werde ich den Unterklasse-Typ nicht kennen, nur die Super-Klasse. Was ist das beste Designmuster dafür?Cloning-Unterklassen in Java
Beispiel:
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 }
}
}
Nein, funktioniert nicht. Probieren Sie es aus: Bar bar = new Bar(); Foo foo = Stange; foo.copy(). Es wird Foo.copy() aufrufen, nicht Bar.Kopie() – ccleve
@ user237815 Ich glaube nicht. 'Bar.copy' überschreibt (markiert mit' @ Override') 'Foo.copy'. –
Tom hat Recht. Der Aufruf von 'copy' erfolgt zur Laufzeit und die JVM ruft die entsprechende' copy'-Methode basierend auf dem Objekttyp auf. –