Polymorphismus in Java-OOPs mit Beispiel

Inhaltsverzeichnis:

Anonim

Was ist Polymorphismus in Java?

Polymorphismus in Java tritt auf, wenn eine oder mehrere Klassen oder Objekte durch Vererbung miteinander verbunden sind. Mit anderen Worten, es ist die Fähigkeit eines Objekts, viele Formen anzunehmen. Durch Vererbung können Benutzer Attribute und Methoden erben, und der Polymorphismus verwendet diese Methoden zur Ausführung verschiedener Aufgaben. Das Ziel ist also die Kommunikation, aber der Ansatz ist anders.

Zum Beispiel haben Sie ein Smartphone für die Kommunikation. Der von Ihnen gewählte Kommunikationsmodus kann beliebig sein. Es kann sich um einen Anruf, eine Textnachricht, eine Bildnachricht, eine E-Mail usw. handeln. Das gemeinsame Ziel ist also die Kommunikation, aber ihr Ansatz ist unterschiedlich. Dies nennt man Polymorphismus.

In diesem Tutorial lernen Sie:

  • Was ist Polymorphismus?
  • Java-Polymorphismus in OOPs mit Beispiel
  • Überschreiben der Methode
  • Unterschied zwischen Überladen und Überschreiben
  • Was ist dynamischer Polymorphismus?
  • Super Keyword
  • Unterschied zwischen statischem und dynamischem Polymorphismus

Klicken Sie hier, wenn das Video nicht zugänglich ist

Java-Polymorphismus in OOPs mit Beispiel

Wir haben eine Elternklasse, 'Konto' mit Funktion der Ein- und Auszahlung. Das Konto hat 2 untergeordnete Klassen. Die Ein- und Auszahlung erfolgt für das Speichern und Überprüfen von Konten. Die von der Account-Klasse geerbten Methoden funktionieren also.

Änderung der Softwareanforderungen

Es gibt eine Änderung in der Anforderungsspezifikation, was in der Softwareindustrie so üblich ist. Sie sollten ein funktionsprivilegiertes Bankkonto mit Überziehungsfazilität hinzufügen.

Überziehung ist eine Möglichkeit, bei der Sie einen Betrag abheben können, der über dem Guthaben auf Ihrem Konto liegt.

Also, Rückzugsmethode für privilegierte Bedürfnisse muss neu implementiert werden. Sie ändern den getesteten Code jedoch nicht im Spar- und Girokonto. Dies ist ein Vorteil von OOPS

Schritt 1) Wenn die Methode "Zurückgezogen" zum Speichern eines Kontos aufgerufen wird, wird eine Methode aus der übergeordneten Kontoklasse ausgeführt.

Schritt 2) Wenn jedoch die "Abhebungs" -Methode für das privilegierte Konto (Überziehungsfazilität) als Abhebungsmethode bezeichnet wird, die in der privilegierten Klasse definiert ist, wird sie ausgeführt. Das ist Polymorphismus.

Überschreiben der Methode

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

Regeln zum Überschreiben von Methoden

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

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 executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Unterschied zwischen Überladen und Überschreiben

Methodenüberladung Überschreiben der Methode

Das Überladen von Methoden erfolgt in derselben Klasse, in der mehrere Methoden denselben Namen, aber unterschiedliche Signaturen haben.

Das Überschreiben von Methoden erfolgt, wenn eine der Methoden in der Superklasse in der Unterklasse neu definiert wird. 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 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 Superklasse 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 Diagramm gezeigt).


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

Wenn eine Basisklassenreferenz zum Aufrufen einer Methode verwendet wird, wird die aufzurufende Methode von der JVM abhängig vom Objekt festgelegt, auf das die Referenz verweist

Obwohl obj beispielsweise ein Verweis auf Doctor ist, ruft es die Methode des Chirurgen auf, da es auf ein Objekt des Chirurgen verweist

Dies wird zur Laufzeit entschieden und daher als dynamischer Polymorphismus oder Laufzeitpolymorphismus bezeichnet

Super Keyword

Was ist, wenn die TreatPatient-Methode in der Surgeon-Klasse die in der Doctor-Klasse definierte Funktionalität ausführen und dann ihre eigene spezifische Funktionalität ausführen möchte?
In diesem Fall Schlüsselwort

superkann verwendet werden, um über die untergeordnete Klasse auf Methoden der übergeordneten Klasse zuzugreifen.
Die TreatPatient-Methode in der Surgeon-Klasse könnte wie folgt geschrieben werden:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Das Schlüsselwort super kann verwendet werden, um auf ein beliebiges Datenelement oder Methoden der Superklasse in der Unterklasse zuzugreifen.Beispiel: - Erlernen von Vererbung, Polymorphismus und Super-Schlüsselwörtern

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 Ypublic void m1(){// overriden methodSystem.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) Kommentiert die Zeilen 6-9 aus. Speichern, kompilieren und führen Sie den Code aus. Beobachten Sie die Ausgabe.
Schritt 4) Kommentar Nr. 10 auskommentieren. Speichern und kompilieren Sie den Code.
Schritt 5) Fehler =? Dies liegt daran, dass die Unterklasse nicht auf private Mitglieder der Superklasse zugreifen kann.

Unterschied zwischen statischem und dynamischem Polymorphismus

Statischer Polymorphismus Dynamischer Polymorphismus
Es bezieht sich auf Methodenüberladung. Es bezieht sich auf das Überschreiben von Methoden.

Eventuelle Fehler werden beim Kompilieren behoben. Da der Code während der Kompilierung nicht ausgeführt wird, ist der Name statisch.

Ex:

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

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

Ex:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();