ich in Methodenargumente in Java funktioniert schrieb das folgende Stück Code:Polymorphismus nicht
class Plane {}
class Airbus extends Plane {}
public class Main {
void fly(Plane p) {
System.out.println("I'm in a plane");
}
void fly(Airbus a) {
System.out.println("I'm in the best Airbus!");
}
public static void main(String[] args) {
Main m = new Main();
Plane plane = new Plane();
m.fly(plane);
Airbus airbus = new Airbus();
m.fly(airbus);
Plane planeAirbus = new Airbus();
m.fly(planeAirbus);
}
}
Und das Ergebnis ist:
I'm in a plane
I'm in the best Airbus!
I'm in a plane
Wenig überraschend die ersten beiden Anrufungen geben I'm in a plane
und I'm in the best Airbus!
bzw. .
Plane planeAirbus = new Airbus();
Die Methode behandelt dieses Objekt als Ebene, obwohl das reale Objekt ein Airbus ist. Selbst wenn ich hinzufügen abstract
-class Plane
, ändert sich nichts und das Ergebnis des letzten Aufrufs ist noch I'm in a plane
Die Frage ist also, warum Polymorphismus nicht Methodenargumente und Anrufungen funktioniert in? Gibt es irgendeinen Zweck? Wie funktioniert es?
Ist der andere Name für dynamische Doppel Versand Bindung oder gibt es unterschiedliche Konzepte? –
Ich denke Doppel-Versand ist anders, aber Doppel-Versand implementiert in der Regel auch dynamische Bindung, so dass sie oft zusammen gesehen werden. – markspace
Double Dispatch kann in Java implementiert werden, indem das Besuchermuster verwendet wird, da Java eine statisch typisierte Sprache ist. – Timmos