Dynamischer Methodenversand in Java

Mehvish Ashiq 15 Februar 2024
  1. Dynamischer Methoden-Dispatch in Java
  2. Bedeutung des dynamischen Methodenversands in Java
  3. Dynamischer Methodenversand mit Codebeispiel in Java
Dynamischer Methodenversand 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.

Dynamischer Methodenversand in Java - Definition Teil eins

Ä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.

dynamischer methodenversand in java - definition teil zwei

Bedeutung des dynamischen Methodenversands in Java

Die folgenden Punkte erhöhen die Bedeutung der Verwendung des dynamischen Versandverfahrens.

  1. Das dynamische Methoden-Dispatch lässt die Java-Unterstützungsmethode überschreiben, die für den Laufzeit-Polymorphismus notwendig ist.
  2. Es ermöglicht der untergeordneten Klasse, ihre Funktionen zu integrieren und die Implementierung gemäß den Projektanforderungen zu aktualisieren.
  3. 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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Java Method