CodeGym/Java-Blog/Germany/Polymorphismus in Java
Autor
Milan Vucic
Programming Tutor at Codementor.io

Polymorphismus in Java

Veröffentlicht in der Gruppe Germany
Hallo! Heute schließen wir eine Reihe von Lektionen über die Prinzipien der OOP ab. In dieser Lektion werden wir über Polymorphismus in Java sprechen. Polymorphismus ist die Möglichkeit, mit verschiedenen Typen so zu arbeiten, als ob sie derselbe Typ wären. Außerdem kann das Verhalten der Objekte je nach Typ unterschiedlich ausfallen. Schauen wir uns diese Aussage einmal genauer an. Polymorphismus in Java - 1Beginnen wir mit dem ersten Teil: „die Möglichkeit, mit verschiedenen Typen so zu arbeiten, als ob sie derselbe Typ wären“. Wie können verschiedene Typen gleich sein? Das klingt ein bisschen seltsam :/ Im Grunde ist alles ganz einfach. Diese Situation tritt zum Beispiel bei der gewöhnlichen Nutzung der Vererbung auf. Sehen wir uns mal an, wie das funktioniert.

Angenommen, wir haben eine einfache Cat-Elternklasse mit einer einzigen run()-Methode:

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
Jetzt werden wir drei Klassen erstellen, die von Cat erben: Lion, Tiger und Cheetah.
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
Wir haben also 3 Klassen. Lass uns die Situation modellieren, in der wir mit ihnen arbeiten können, als wären sie dieselbe Klasse. Stell dir vor, eine unserer Katzen ist krank und braucht Hilfe von Dr. Dolittle. Lass uns versuchen, eine Dolittle-Klasse zu erstellen, die Löwen, Tiger und Geparden heilen kann.
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
Es scheint, als wäre das Problem gelöst: Die Klasse ist geschrieben und einsatzbereit. Aber was tun wir, wenn wir unser Programm erweitern wollen? Wir haben derzeit nur 3 Arten: Löwen, Tiger und Geparden. Aber es gibt mehr als 40 Arten von Katzen auf der Welt. Stell dir vor, was passieren würde, wenn wir separate Klassen für Pallaskatzen, Jaguare, Wildkatzen, Hauskatzen und all die anderen Arten einführen würden. Das Programm selbst wird natürlich funktionieren, aber wir müssen der Klasse Dolittle ständig neue Methoden hinzufügen, um jede Art von Katze zu heilen. Infolgedessen wird sie zu einer noch nie dagewesenen Größe anwachsen. Hier kommt der Polymorphismus ins Spiel – „die Möglichkeit, mit verschiedenen Typen so zu arbeiten, als ob sie derselbe Typ wären“. Wir müssen nicht unzählige Methoden entwickeln, um das Gleiche zu tun – eine Katze zu heilen. Eine Methode reicht für alle völlig aus:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
Die Methode healCat() akzeptiert die Objekte Lion, Tiger und Cheetah – sie sind alle Instanzen von Cat:
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
Konsolenausgabe:
Der Patient ist gesund! Der Patient ist gesund! Der Patient ist gesund!
Unsere Dolittle-Klasse arbeitet also mit verschiedenen Typen, als ob sie derselbe Typ wären. Kommen wir nun zum zweiten Teil: „Außerdem kann das Verhalten der Objekte je nach Typ unterschiedlich ausfallen.“ Es ist alles ganz einfach. In der Natur läuft jede Katze auf eine andere Art und Weise. Zumindest laufen sie mit unterschiedlichen Geschwindigkeiten. Von unseren drei Raubkatzen ist der Gepard der schnellste, während Tiger und Löwe langsamer laufen. Mit anderen Worten: Ihr Verhalten ist anders. Polymorphismus ist mehr als nur eine Möglichkeit, verschiedene Typen als einen zu verwenden. So können wir uns auch an ihre Unterschiede erinnern und das spezifische Verhalten jedes einzelnen von ihnen bewahren. Das folgende Beispiel veranschaulicht dies. Angenommen, unsere Katzen haben sich nach einer erfolgreichen Genesung dazu entschlossen, ein wenig herumzurennen. Wir werden das in unsere Dolittle-Klasse einbauen:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
Versuchen wir, den gleichen Code auszuführen, um drei Tiere zu behandeln:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
Und so sehen die Ergebnisse aus:
Der Patient ist gesund! Der Löwe läuft mit 80 km/h. Der Patient ist gesund! Der Tiger läuft mit 60 km/h. Der Patient ist gesund! Der Gepard läuft bis zu 120 km/h schnell
Hier sehen wir deutlich, dass das spezifische Verhalten der Objekte erhalten bleibt, obwohl wir alle drei Tiere an die Methode übergeben haben, nachdem wir sie zu Cat „verallgemeinert“ haben. Dank der Polymorphie merkt sich Java, dass dies nicht einfach drei beliebige Katzen sind. Sie sind ein Löwe, ein Tiger und ein Gepard, die alle unterschiedlich laufen. Polymorphismus in Java - 2Dies verdeutlicht den wichtigsten Vorteil des Polymorphismus: Flexibilität. Wenn wir eine Funktion implementieren müssen, die von vielen Typen geteilt wird, dann werden Löwen, Tiger und Geparden einfach zu „Katzen“. Alle Tiere sind unterschiedlich, aber in manchen Situationen ist eine Katze eine Katze, unabhängig von ihrer Art :) Hier ist eine Videobestätigung für dich. Wenn diese „Verallgemeinerung“ unerwünscht ist und wir stattdessen wollen, dass sich jede Art anders verhält, macht jede Art ihr eigenes Ding. Dank der Polymorphie kannst du eine einzige Schnittstelle (eine Reihe von Methoden) für eine große Anzahl von Klassen erstellen. Das macht Programme weniger kompliziert. Selbst wenn wir das Programm auf 40 Arten von Katzen erweitern, hätten wir immer noch die einfachste Schnittstelle: eine einzige run()-Methode für alle 40 Katzen.
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare