Dynamischer Methodenversand in Java
- Dynamischer Methoden-Dispatch in Java
- Bedeutung des dynamischen Methodenversands in Java
- Dynamischer Methodenversand mit Codebeispiel in Java
Dieses Tutorial informiert über die dynamische Methode Dispatch in Java. Es spricht über seine technische Definition und Bedeutung und erklärt mit Codebeispielen.
Dynamischer Methoden-Dispatch in Java
Lassen Sie uns die Wörter aufschlüsseln und uns Dispatch
als Entscheidung vorstellen, welche Funktion (Methode) aufgerufen werden soll. Das Wort “Dynamisch” sagt aus, dass es zur Laufzeit bestimmt wird.
Vereinfacht gesagt können wir sagen, welche Funktion/Methode ausgeführt werden soll, wird zur Laufzeit entschieden.
Unter Berücksichtigung der technischen Definition ist der dynamische Methodenversand (auch als Laufzeitpolymorphismus bekannt) ein Mechanismus, der verwendet wird, um einen Aufruf einer überschriebenen Methode zur Laufzeit statt zur Kompilierzeit aufzulösen.
Wenn wir die überschriebene Methode in der untergeordneten Klasse mithilfe einer Referenz aufrufen, entscheidet Java, welche Methode ausgeführt wird, abhängig vom Typ des Objekts, auf das sie verweist. Lassen Sie uns die Definition verstehen, indem Sie die folgenden zwei Code-Screenshots verwenden.
Konzentrieren Sie sich auf den folgenden Screenshot, in dem wir drei Klassen namens Shape
, Rectangle
und die Klasse Main
haben. Shape
ist die Oberklasse und Rectangle
ist die untergeordnete Klasse.
Die Methode main
hat zwei Objekte vom Typ Shape
und Rectangle
und speichert deren Referenzen in den Variablen shape
und rectangle
.
Diese Variablen rufen die Methode display()
der jeweiligen Klasse auf. Wenn wir beispielsweise shape.display()
aufrufen, würde zur Kompilierzeit entschieden, dass display()
der Klasse Shape
aufgerufen wird, weil shape
die Referenz der Klasse Shape
enthält.
Ändern Sie nun den Code wie im folgenden Screenshot angegeben. Hier enthält die Methode main
die beiden Objekte, eines für die Klasse Shape
und das andere für die Klasse Rectangle
, aber beide (die Variablen shape
und rectangle
) enthalten die Referenz der Klasse Shape
.
Wie entscheidet das Programm also, welche überschriebene Methode aufgerufen werden soll? Hier spielt der dynamische Methodenversand seine Rolle.
Hier bestimmt Java, welche Methode ausgeführt werden soll, abhängig von der Art des Objekts, auf das sie sich bezieht.
Wenn das Objekt vom Typ Rectangle
ist, wird display()
aus der Klasse Rectangle
aufgerufen, und wenn das Objekt vom Typ Shape
ist, dann wird die Methode display()
der Shape
-Klasse aufgerufen. Klasse würde gerufen. Und all diese Entscheidungen werden zur Laufzeit getroffen.
Dies nennen wir Laufzeitpolymorphismus oder dynamischen Methodenversand.
Bedeutung des dynamischen Methodenversands in Java
Die folgenden Punkte erhöhen die Bedeutung der Verwendung des dynamischen Versandverfahrens.
- Das dynamische Methoden-Dispatch lässt die Java-Unterstützungsmethode überschreiben, die für den Laufzeit-Polymorphismus notwendig ist.
- Es ermöglicht der untergeordneten Klasse, ihre Funktionen zu integrieren und die Implementierung gemäß den Projektanforderungen zu aktualisieren.
- Sie lässt die Superklasse eine Funktion/Methode definieren, die mit ihren Kindklassen geteilt wird, und erlaubt diesen Kindklassen, die Implementierung der Funktion zu aktualisieren.
Dynamischer Methodenversand mit Codebeispiel in Java
Beispielcode:
class Shape {
Shape() {}
void display() {
System.out.println("I am in the Shape class");
}
}
class Rectangle extends Shape {
Rectangle() {}
void display() {
System.out.println("I am in the Rectangle class");
}
}
class Triangle extends Shape {
Triangle() {}
void display() {
System.out.println("I am in the Triangle class");
}
}
public class Main {
public static void main(String args[]) {
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();
rectangle.display();
triangle.display();
}
}
Ausgabe:
I am in the Rectangle class
I am in the Triangle class
Hier erweitern die Klassen Rectangle
und Triangle
die Klasse Shape
. Diese Klassen haben eine display()
-Methode, die wir die main
-Methode nennen sollen.
Die Methode main
hat zwei Objekte, eines für den Typ Rectangle
und das andere für den Typ Triangle
, aber die Referenzvariablen rectangle
und triangle
verweisen auf dieselbe übergeordnete Klasse namens Shape
.
Wie finde ich heraus, welche Funktion aufgerufen wird? Hier kommt das dynamische Versandverfahren ins Spiel.
Denken Sie daran, dass wir in den folgenden beiden Codecodes auch dynamisches Binden und Upcasting verwenden.
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();
Die dynamische Bindung verwendet das Objekt (Instanz der Klasse, hier new Rectangle()
und new Triangle()
), um den Methodenaufruf zur Laufzeit aufzulösen.
Auch hier kommt das Upcasting zum Einsatz, da die Referenzvariablen der Elternklassen (Rectangle
und Triangle
) auf die Child-Klassen Rectangle
und Triangle
verweisen.