Im letzten Tutorial haben wir Polymorphismus in Java besprochen. In diesem Handbuch werden wir Arten von Polymorphismus sehen. Es gibt zwei Arten von Polymorphismus in Java:
1) Statischer Polymorphismus, auch bekannt als Kompilierzeitpolymorphismus
2) Dynamischer Polymorphismus, auch bekannt als Laufzeitpolymorphismus
Kompilierzeitpolymorphismus (oder statischer Polymorphismus)
Polymorphismus, der während der Compilerzeit aufgelöst wird, wird als statischer Polymorphismus bezeichnet. Methodenüberladung ist ein Beispiel für Kompilierzeitpolymorphismus.
Methodenüberladung: Dies ermöglicht es uns, mehr als eine Methode mit demselben Namen zu haben, wenn die Parameter der Methoden in Anzahl, Reihenfolge und Datentypen der Parameter unterschiedlich sind. Wir haben hier bereits über das Überladen von Methoden gesprochen: Wenn Sie diese Anleitung nicht gelesen haben, lesen Sie: Methodenüberladung in Java
Beispiel für statischen Polymorphismus
Methodenüberladung ist eine der Möglichkeiten, wie Java statischen Polymorphismus unterstützt. Hier haben wir zwei Definitionen derselben Methode add() Welche add Methode aufgerufen wird, wird durch die Parameterliste zur Kompilierungszeit bestimmt. Aus diesem Grund wird dies auch als Kompilierzeitpolymorphismus bezeichnet.
class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}
Ausgabe:
3060
Laufzeitpolymorphismus (oder dynamischer Polymorphismus)
Es wird auch als dynamischer Methodenversand bezeichnet. Dynamischer Polymorphismus ist ein Prozess, bei dem ein Aufruf einer überschriebenen Methode zur Laufzeit aufgelöst wird. Ich habe das Überschreiben von Methoden bereits ausführlich in einem separaten Tutorial behandelt, siehe dazu: Überschreiben von Methoden in Java.
Beispiel
In diesem Beispiel haben wir zwei Klassen ABC und XYZ. ABC ist eine übergeordnete Klasse und XYZ ist eine untergeordnete Klasse. Die untergeordnete Klasse überschreibt die Methode myMethod () der übergeordneten Klasse. In diesem Beispiel haben wir ein untergeordnetes Klassenobjekt der übergeordneten Klassenreferenz zugewiesen, sodass der Typ des Objekts zur Laufzeit bestimmt wird, um zu bestimmen, welche Methode aufgerufen werden soll. Es ist der Objekttyp, der bestimmt, welche Version der Methode aufgerufen wird (nicht der Referenztyp).
Um das Konzept des Überschreibens zu verstehen, sollten Sie über Grundkenntnisse der Vererbung in Java verfügen.
class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}
Ausgang:
Overriding Method
Wenn eine überschriebene Methode über eine Referenz der übergeordneten Klasse aufgerufen wird, bestimmt der Typ des Objekts, welche Methode ausgeführt werden soll. Somit wird diese Bestimmung zur Laufzeit vorgenommen.
Da beide Klassen, child class und parent class die gleiche Methode haben animalSound
. Welche Version der Methode (untergeordnete Klasse oder übergeordnete Klasse) aufgerufen wird, wird zur Laufzeit von JVM festgelegt.
Einige weitere übergeordnete Beispiele:
ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ
Im dritten Fall soll die Methode der Child-Klasse ausgeführt werden, da die Methode durch den Objekttyp bestimmt wird und da das Objekt zur Child-Klasse gehört, wird die Child-Klassenversion von myMethod() aufgerufen.