Polymorphismus in Java (Statisch und Dynamisch)

Was ist Polymorphismus in Java?

Polymorphie in Java tritt auf, wenn eine oder mehrere Klassen oder Objekte durch Vererbung miteinander verbunden sind. Es ist die Fähigkeit eines Objekts, viele Formen anzunehmen. Durch Vererbung können Benutzer Attribute und Methoden erben, und Polymorphismus verwendet diese Methoden, um verschiedene Aufgaben auszuführen. Das Ziel ist also Kommunikation, aber der Ansatz ist unterschiedlich.

Sie haben beispielsweise ein Smartphone zur Kommunikation. Der Kommunikationsmodus, den Sie wählen, kann alles sein. Es kann ein Anruf, eine Textnachricht, eine Bildnachricht, eine E-Mail usw. sein. Das Ziel ist also die Kommunikation, aber der Ansatz ist unterschiedlich. Dies nennt man Polymorphismus. Jetzt lernen wir Polymorphismus in Java mit Beispiel.

Klicke Here wenn das Video nicht zugänglich ist

Java Polymorphismus in OOPs mit Beispiel

Wir haben eine übergeordnete Klasse, „Konto“, mit der Funktion zum Einzahlen und Abheben. Konto hat zwei untergeordnete Klassen. Die Vorgänge zum Einzahlen und Abheben sind für Sparkonten und Girokonten gleich. Daher funktionieren die geerbten Methoden der Kontoklasse.

Einzelvererbung in Java
Java Beispiel für Polymorphismus

Änderung der Softwareanforderungen

Es gibt eine Änderung in der Anforderungsspezifikation, was in der Softwarebranche sehr üblich ist. Sie sollen die Funktionalität eines privilegierten Bankkontos mit Überziehungsmöglichkeit hinzufügen. Zum Hintergrund: Überziehung ist eine Möglichkeit, einen Betrag abzuheben, der höher ist als der verfügbare Kontostand. Daher muss die Abhebungsmethode für privilegierte Anforderungen neu implementiert werden. Aber Sie ändern den getesteten Codeabschnitt im Sparkonto und Girokonto nicht. Dies ist der Vorteil von HOPPLA

Java Polymorphie

Schritt 1) Wenn also die „zurückgezogene“ Methode zum Speichern des Kontos aufgerufen wird, wird eine Methode aus der übergeordneten Kontoklasse ausgeführt

Java Polymorphie

Schritt 2) Wenn jedoch die Methode „Abheben“ für das privilegierte Konto (Überziehungskredit) aufgerufen wird, wird die in der privilegierten Klasse definierte Auszahlungsmethode ausgeführt. Das ist Polymorphismus in OOPs.

Java Polymorphie

Methodenüberschreibung in Java

Beim Überschreiben von Methoden wird eine Superklassenmethode in einer Unterklasse neu definiert.

Regeln für das Überschreiben von Methoden

  • Die Methodensignatur, also Methodenname, Parameterliste und Rückgabetyp, müssen exakt übereinstimmen.
  • Die überschriebene Methode kann die Zugänglichkeit erweitern, aber nicht einschränken, d. h. wenn sie in der Basisklasse privat ist, kann die untergeordnete Klasse sie öffentlich machen, aber nicht umgekehrt.

Regeln für das Überschreiben von Methoden in Java

Beispiel

class Doctor{
  public void treatPatient(){
  // treatPatient method
  
}
class Surgeon extends Doctor{
  public void treatPatient(){
  // treatPatient method
  }
}
Class run{
  public static void main (String args[]){
    Doctor doctorObj = new Doctor()
	// treatPatient method in class Doctor will be executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

Unterschied zwischen Überladen und Überschreiben

Methodenüberladung
Methodenüberschreibung
Das Überladen von Methoden erfolgt in derselben Klasse, wenn mehr als eine Methode denselben Namen, aber unterschiedliche Signaturen hat. Beim Überschreiben einer Methode wird eine der Methoden in der Oberklasse in der Unterklasse neu definiert. In diesem Fall bleibt die Signatur der Methode gleich.
Ex:

void sum (int a , int b);
void sum (int a , int b, int c);
void sum (float a, double b);
Ex:

class X{
  public int sum(){
     // some code
  }
}
class Y extends X{
  public int sum(){
    //overridden method
   //signature is same
 }
}

Was ist dynamischer Polymorphismus?

Dynamischer Polymorphismus in OOPs ist der Mechanismus, mit dem mehrere Methoden mit demselben Namen und derselben Signatur in der Oberklasse und Unterklasse definiert werden können. Der Aufruf einer überschriebenen Methode wird zur Laufzeit aufgelöst.

Beispiel für dynamischen Polymorphismus:

Eine Referenzvariable der Oberklasse kann auf ein Unterklassenobjekt verweisen

 Doctor obj = new Surgeon();

Betrachten Sie die Aussage

obj.treatPatient();

Hier gehört die Referenzvariable „obj“ zur übergeordneten Klasse, aber das Objekt, auf das sie zeigt, gehört zur untergeordneten Klasse (wie im folgenden Diagrammbeispiel für Polymorphismus gezeigt).

obj.treatPatient() führt die Methode treatPatient() der Unterklasse – Surgeon aus

Wenn eine Basisklassenreferenz zum Aufrufen einer Methode verwendet wird, entscheidet die JVM, welche Methode aufgerufen werden soll, abhängig von dem Objekt, auf das die Referenz verweist

Obwohl obj beispielsweise eine Referenz auf Doctor ist, ruft es die Methode von Surgeon auf, da es auf ein Surgeon-Objekt zeigt

Dies wird zur Laufzeit entschieden und daher als bezeichnet dynamisch or Laufzeitpolymorphismus

Unterschied zwischen statischem und dynamischem Polymorphismus

Statischer Polymorphismus in Java ist eine Art von Polymorphismus, der die Informationen zum Aufrufen einer Methode zur Kompilierungszeit sammelt, während dynamischer Polymorphismus eine Art von Polymorphismus ist, der die Informationen zum Aufrufen einer Methode zur Laufzeit sammelt.

Statischer Polymorphismus
Dynamischer Polymorphismus
Es bezieht sich auf Methodenüberladung. Es bezieht sich auf das Überschreiben von Methoden.
Eventuelle Fehler werden zur Kompilierungszeit behoben. Da der Code beim Kompilieren nicht ausgeführt wird, daher der Name static.

Ex:

void sum (int a , int b);
void sum (float a, double b);
int sum (int a, int b); //compiler gives error.

Falls eine Referenzvariable eine überschriebene Methode aufruft, wird die aufzurufende Methode durch das Objekt bestimmt, auf das Ihre Referenzvariable zeigt. Dies kann nur zur Laufzeit bestimmt werden, wenn Code ausgeführt wird, daher der Name „dynamisch“.

Ex:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Super Keyword in Java

Was ist, wenn die Methode „treatPatient“ in der Klasse „Surgeon“ die in der Klasse „Doctor“ definierte Funktionalität ausführen und dann ihre eigene spezifische Funktionalität ausführen möchte? In diesem Fall das Schlüsselwort superkann verwendet werden, um von der untergeordneten Klasse aus auf Methoden der übergeordneten Klasse zuzugreifen. Die Methode „treatPatient“ in der Klasse „Surgeon“ könnte wie folgt geschrieben werden:

treatPatient(){
   super.treatPatient();
     //add code specific to Surgeon
}

Mit dem Schlüsselwort super kann auf alle Datenelemente oder Methoden der Superklasse in der Unterklasse zugegriffen werden.

Als nächstes lernen wir das Super-Schlüsselwort kennen. Erbe und Polymorphismus in Java mit Beispielprogrammen.

Beispiel: -Um Vererbung, Polymorphismus und Super-Schlüsselwörter zu lernen

Schritt 1) Kopieren Sie den folgenden Code in einen Editor

public class Test{
     public static void main(String args[]){
        X x= new X();
       Y y = new  Y();
       y.m2();
      //x.m1();
      //y.m1();
     //x = y;// parent pointing to object of child
     //x.m1() ;
     //y.a=10;
   }
}
class X{
   private int a;
   int b;
      public void m1(){
       System.out.println("This is method m1 of class X");
     }
}
class Y extends X{
      int c; // new instance variable of class Y
         public void m1(){
            // overriden method
            System.out.println("This is method m1 of class Y");
        }
       public void m2(){
           super.m1();
           System.out.println("This is method m2 of class Y");
      }
}

Schritt 2) Speichern, kompilieren und führen Sie den Code aus. Beobachten Sie die Ausgabe.

Schritt 3) Entkommentieren Sie die Zeilen Nr. 6-9. Speichern, kompilieren und führen Sie den Code aus. Beobachten Sie die Ausgabe.

Schritt 4) Kommentieren Sie Zeile Nr. 10 aus. Speichern und kompilieren Sie den Code.

Schritt 5) Fehler = ? Dies liegt daran, dass die Unterklasse nicht auf private Mitglieder der Oberklasse zugreifen kann.

Zusammenfassung

  • Polymorphismus in der objektorientierten Programmierung tritt auf, wenn eine oder mehrere Klassen oder Objekte durch Vererbung miteinander verbunden sind. Es ist die Fähigkeit eines Objekts, viele Formen anzunehmen.
  • Beim Überschreiben von Methoden wird eine Superklassenmethode in einer Unterklasse neu definiert.
  • Dynamischer Polymorphismus in Java ist der Mechanismus, mit dem mehrere Methoden mit demselben Namen und derselben Signatur in der Superklasse und Unterklasse definiert werden können.
  • Statischer Polymorphismus in Java ist eine Art von Polymorphismus, der die Informationen zum Aufrufen einer Methode zur Kompilierungszeit sammelt, während dynamischer Polymorphismus eine Art von Polymorphismus ist, der die Informationen zum Aufrufen einer Methode zur Laufzeit sammelt.
  • Mit dem Schlüsselwort „Super“ können Sie von der untergeordneten Klasse aus auf Methoden der übergeordneten Klasse zugreifen.