Polymorphismus in Java ist ein Konzept, mit dem wir eine einzige Aktion auf verschiedene Arten ausführen können. Polymorphismus leitet sich von 2 griechischen Wörtern ab: poly und morphs. Das Wort „poly“ bedeutet „viele“ und „morphs“ bedeutet „Formen“. Also bedeutet Polymorphismus viele Formen.
Es gibt zwei Arten von Polymorphismus in Java: Polymorphismus zur Kompilierzeit und Polymorphismus zur Laufzeit. Wir können Polymorphismus in Java durch Methodenüberladung und Methodenüberschreibung durchführen.
Wenn Sie eine statische Methode in Java überladen, ist das ein Beispiel für Kompilierzeit-Polymorphismus. Hier werden wir uns auf den Laufzeit-Polymorphismus in Java konzentrieren.
Laufzeit-Polymorphismus in Java
Laufzeit-Polymorphismus oder Dynamic Method Dispatch ist ein Prozess, bei dem der Aufruf einer überschriebenen Methode zur Laufzeit und nicht zur Kompilierzeit aufgelöst wird.
Bei diesem Prozess wird eine überschriebene Methode über die Referenzvariable einer Oberklasse aufgerufen. Die Bestimmung der aufzurufenden Methode basiert auf dem Objekt, auf das die Referenzvariable verweist.
Lassen Sie uns zunächst das Upcasting vor dem Runtime Polymorphism verstehen.
Upcasting
Wenn die Referenzvariable der Parent-Klasse auf das Objekt der Child-Klasse verweist, spricht man von Upcasting. Zum Beispiel:
Für das Upcasting können wir die Referenzvariable eines Klassentyps oder eines Schnittstellentyps verwenden. Ein Beispiel:
Hier wäre die Beziehung der Klasse B:
B IS-A AB IS-A IB IS-A Object
Da Object die Wurzelklasse aller Klassen in Java ist, können wir schreiben B IS-A Object.
Beispiel für Java Runtime Polymorphism
In diesem Beispiel erstellen wir zwei Klassen Bike und Splendor. Die Klasse Splendor erweitert die Klasse Bike und überschreibt deren run()-Methode. Wir rufen die run-Methode über die Referenzvariable der Klasse Parent auf. Da sie auf das Objekt der Unterklasse verweist und die Methode der Unterklasse die Methode der Elternklasse überschreibt, wird die Methode der Unterklasse zur Laufzeit aufgerufen.
Da der Methodenaufruf von der JVM und nicht vom Compiler bestimmt wird, spricht man von Laufzeit-Polymorphismus.
Jetzt testen
Ausgabe:
running safely with 60km.
Beispiel für Java-Laufzeit-Polymorphismus: Bank
Betrachten Sie ein Szenario, in dem die Klasse Bank eine Methode zum Ermitteln des Zinssatzes bereitstellt. Der Zinssatz kann jedoch je nach Bank unterschiedlich sein. Zum Beispiel bieten die Banken SBI, ICICI und AXIS einen Zinssatz von 8,4 %, 7,3 % und 9,7 % an.
Anmerkung: Dieses Beispiel ist auch im Methoden-Overriding gegeben, aber es gab kein Upcasting.
Testen Sie es jetzt
Ausgabe:
SBI Rate of Interest: 8.4ICICI Rate of Interest: 7.3AXIS Rate of Interest: 9.7
Java-Laufzeit-Polymorphismus-Beispiel: Shape
Testen Sie es jetzt
Ausgabe:
drawing rectangle...drawing circle...drawing triangle...
Java Runtime Polymorphism Example: Tier
Jetzt testen
Ausgabe:
eating bread...eating rat...eating meat...
Java-Laufzeit-Polymorphismus mit Daten-Member
Eine Methode wird überschrieben, nicht die Daten-Member, daher kann Laufzeit-Polymorphismus nicht durch Daten-Member erreicht werden.
Im folgenden Beispiel haben beide Klassen ein Daten-Member speedlimit. Wir greifen auf das Datenmitglied über die Referenzvariable der Klasse Parent zu, die auf das Objekt der Unterklasse verweist. Da wir auf das Datenelement zugreifen, das nicht überschrieben ist, wird es immer auf das Datenelement der Parent-Klasse zugreifen.
Regel: Laufzeit-Polymorphie kann nicht durch Datenmember erreicht werden.
Testen Sie es jetzt
Ausgabe: