Java-Polymorphismus (mit Beispielen)

In diesem Tutorial lernen wir anhand von Beispielen den Java-Polymorphismus und seine Implementierung kennen.

Polymorphismus ist ein wichtiges Konzept der objektorientierten Programmierung. Es bedeutet einfach mehr als eine Form.

Das heißt, dieselbe Entität (Methode oder Operator oder Objekt) kann in verschiedenen Szenarien unterschiedliche Operationen ausführen.

Beispiel: Java-Polymorphismus

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Ausgabe

 Rendering Square… Rendering Circle… 

Im obigen Beispiel haben wir eine Oberklasse erstellt: Polygon und zwei Unterklassen: Quadrat und Kreis. Beachten Sie die Verwendung der render()Methode.

Der Hauptzweck der render()Methode ist das Rendern der Form. Das Rendern eines Quadrats unterscheidet sich jedoch vom Rendern eines Kreises.

Daher render()verhält sich die Methode in verschiedenen Klassen unterschiedlich. Oder wir können sagen, render()ist polymorph.

Warum Polymorphismus?

Durch Polymorphismus können wir konsistenten Code erstellen. Im vorherigen Beispiel können wir auch verschiedene Methoden erstellen: renderSquare()und renderCircle()Quadrat bzw. Kreis rendern.

Dies wird perfekt funktionieren. Für jede Form müssen wir jedoch unterschiedliche Methoden erstellen. Dadurch wird unser Code inkonsistent.

Um dies zu lösen, können wir durch Polymorphismus in Java eine einzige Methode erstellen render(), die sich für verschiedene Formen unterschiedlich verhält.

Hinweis : Die print()Methode ist auch ein Beispiel für Polymorphismus. Es wird verwendet , um Werte unterschiedlicher Typen drucken möchten char, int, stringetc.

Wir können Polymorphismus in Java auf folgende Weise erreichen:

  1. Überschreiben der Methode
  2. Methodenüberladung
  3. Überlastung des Bedieners

Überschreiben der Java-Methode

Wenn während der Vererbung in Java dieselbe Methode sowohl in der Oberklasse als auch in der Unterklasse vorhanden ist. Dann überschreibt die Methode in der Unterklasse dieselbe Methode in der Oberklasse. Dies wird als Methodenüberschreibung bezeichnet.

In diesem Fall führt dieselbe Methode eine Operation in der Oberklasse und eine andere Operation in der Unterklasse aus. Beispielsweise,

Beispiel 1: Polymorphismus mit Methodenüberschreibung

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Ausgabe :

 Java-Programmiersprache Gemeinsame englische Sprache

Im obigen Beispiel haben wir eine Oberklasse mit dem Namen Language und eine Unterklasse mit dem Namen Java erstellt. Hier ist die Methode displayInfo()sowohl in Sprache als auch in Java vorhanden.

Die Verwendung von displayInfo()dient zum Drucken der Informationen. Es werden jedoch unterschiedliche Informationen in Sprache und Java gedruckt.

Basierend auf dem Objekt, das zum Aufrufen der Methode verwendet wird, werden die entsprechenden Informationen gedruckt.

Arbeiten des Java-Polymorphismus

Hinweis : Die aufgerufene Methode wird während der Ausführung des Programms festgelegt. Daher ist das Überschreiben von Methoden ein Laufzeitpolymorphismus .

2. Überladen der Java-Methode

In einer Java-Klasse können wir Methoden mit demselben Namen erstellen, wenn sie sich in den Parametern unterscheiden. Beispielsweise,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

Dies wird in Java als Methodenüberladung bezeichnet. Hier führt dieselbe Methode basierend auf dem Parameter unterschiedliche Operationen aus.

Beispiel 3: Polymorphismus unter Verwendung von Methodenüberladung

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Ausgabe :

 ********** ###########

Im obigen Beispiel haben wir eine Klasse mit dem Namen Pattern erstellt. Die Klasse enthält eine Methode mit dem Namen display(), die überladen ist.

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Hier besteht die Hauptfunktion von display()darin, das Muster zu drucken. Basierend auf den übergebenen Argumenten führt die Methode jedoch verschiedene Operationen aus:

  • Gibt ein Muster aus *, wenn kein Argument übergeben wird oder
  • Gibt das Muster des Parameters aus, wenn ein einzelnes charTypargument übergeben wird.

Hinweis : Die aufgerufene Methode wird vom Compiler festgelegt. Daher ist es auch als Polymorphismus zur Kompilierungszeit bekannt.

3. Überladen des Java-Operators

Einige Operatoren in Java verhalten sich bei verschiedenen Operanden unterschiedlich. Beispielsweise,

  • + operator is overloaded to perform numeric addition as well as string concatenation, and
  • operators like &, |, and ! are overloaded for logical and bitwise operations.

Let's see how we can achieve polymorphism using operator overloading.

The + operator is used to add two entities. However, in Java, the + operator performs two operations.

1. When + is used with numbers (integers and floating-point numbers), it performs mathematical addition. For example,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. When we use the + operator with strings, it will perform string concatenation (join two strings). For example,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

Im obigen Beispiel haben wir eine Objektvariable pl der ProgrammingLanguage-Klasse erstellt. Hier ist pl eine polymorphe Variable. Das ist weil,

  • In der Anweisung pl = new ProgrammingLanguage()verweist pl auf das Objekt der ProgrammingLanguage-Klasse.
  • Und in der Anweisung pl = new Java()verweist pl auf das Objekt der Java-Klasse.

Dies ist ein Beispiel für Upcasting in Java.

Interessante Beiträge...