Multiple Dispatch vs. Funktionsüberladung

14

Ich versuche den Unterschied (falls vorhanden) zwischen den beiden zu verstehen.

Laut der Wikipedia-Seite für Multiple Dispatch ist es gleichbedeutend mit Function Overloading, aber später heißt es dann weiter:

In einer Sprache mit nur einem Versand, wie Java […]

Das scheint ein Widerspruch zu sein, da Java das Überladen von Funktionen unterstützt.

Also was ist es? Unterscheidet sich Multiple Dispatch von Function Overloading oder ist der Artikel falsch in der Behauptung, dass Java Multible Dispatch nicht unterstützt?

KaptajnKold
quelle

Antworten:

16

Mehrfachversand ist nicht (immer) das Gleiche wie Funktionsüberladung, obwohl sie einige Ähnlichkeiten aufweisen. Und Java unterstützt keinen Mehrfachversand.

In statisch typisierten Sprachen, einschließlich Java, besteht der größte Unterschied zwischen dem Versand und dem Überladen darin, dass das Überladen auf dem statischen Parametertyp basiert (dh die Wahl, welche Methode tatsächlich aufgerufen wird, wird zur Kompilierungszeit entschieden), während der Versand auf der Dynamik basiert Typen (dh die Entscheidung wird zur Laufzeit getroffen). (Solche Sprachen unterstützen normalerweise keinen Mehrfachversand.)

Andererseits kann dies eine Frage der Terminologie sein. In dynamisch getippten Sprachen scheinen Versand und Überladung tatsächlich auf dasselbe hinauszulaufen.

Péter Török
quelle