Polymorfism i Java OOP med exempel

Innehållsförteckning:

Anonim

Vad är polymorfism i Java?

Polymorfism i Java uppstår när det finns en eller flera klasser eller objekt relaterade till varandra genom arv. Med andra ord är det föremålets förmåga att ta många former. Arv låter användare ärva attribut och metoder, och polymorfism använder dessa metoder för att utföra olika uppgifter. Så, målet är kommunikation men metoden är annorlunda.

Till exempel har du en smartphone för kommunikation. Det kommunikationsläge du väljer kan vara vad som helst. Det kan vara ett samtal, ett textmeddelande, ett bildmeddelande, e-post osv. Så målet är vanligt att det är kommunikation, men deras inställning är annorlunda. Detta kallas polymorfism.

I den här handledningen lär du dig-

  • Vad är polymorfism?
  • Java polymorfism i OOP med exempel
  • Metod Åsidosättande
  • Skillnad mellan överbelastning och överstyrning
  • Vad är dynamisk polymorfism?
  • Super nyckelord
  • Skillnad mellan statisk och dynamisk polymorfism

Klicka här om videon inte är tillgänglig

Java polymorfism i OOP med exempel

Vi har en föräldraklass, 'Konto' med funktionen för insättning och uttag. Kontot har två barnklasser. Insättningen och uttag sker på samma sätt för spara och kontrollera konton. Så de ärvda metoderna från kontoklassen fungerar.

Ändring av programvarukrav

Det finns en förändring i kravspecifikationen, något som är så vanligt i mjukvaruindustrin. Du ska lägga till funktions privilegierat bankkonto med kassakrediter.

Som bakgrund är checkräkning en möjlighet där du kan ta ut ett belopp som är mer än tillgängligt saldot på ditt konto.

Så, dra tillbaka metoden för privilegierade behov att implementeras på nytt. Men du ändrar inte den testade kodkoden i Spar- och kontrollkontot. Detta är fördelen med OOPS

Steg 1) Så att när metoden "återkallad" för att spara konto kallas en metod från överordnad kontoklass exekveras.

Steg 2) Men när "Uttag" -metoden för det privilegierade kontot (checkräkningskredit) kallas uttagningsmetoden som definierats i den privilegierade klassen körs. Detta är polymorfism.

Metod Åsidosättande

Metodöverstyrning definierar en superklassmetod i en underklass.

Regler för metodöverskridande

  • Metodsignaturen, dvs. metodnamn, parameterlista och returtyp måste matcha exakt.
  • Den åsidosatta metoden kan vidga tillgängligheten men inte begränsa den, dvs. om den är privat i basklassen kan barnklassen göra den offentlig men inte tvärtom.

Exempel

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();}}

Skillnad mellan överbelastning och överstyrning

Metod överbelastning Metod Åsidosättande

Metodöverbelastning är i samma klass, där mer än en metod har samma namn men olika signaturer.

Metodöverstyrning är när en av metoderna i superklassen omdefinieras i underklassen. I det här fallet är metodens signatur densamma.

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}}

Vad är dynamisk polymorfism?

Dynamisk polymorfism är den mekanism genom vilken flera metoder kan definieras med samma namn och signatur i superklassen och underklassen. Anropet till en åsidosatt metod löses vid körning.

Dynamisk polymorfism Exempel:

En referensvariabel för superklassen kan referera till ett underklassobjekt

Doctor obj = new Surgeon();

Tänk på uttalandet

obj.treatPatient();

Här är referensvariabeln "obj" av moderklassen, men objektet som den pekar på är av underklassen (som visas i diagrammet).


obj.treatPatient () kommer att utföra treatPatient () -metoden i underklassen - Surgeon

Om en basklassreferens används för att anropa en metod bestäms metoden som ska åberopas av JVM, beroende på objektet som referensen pekar på

Till exempel, även om obj är en hänvisning till läkare, kallar den metoden för kirurg, eftersom den pekar på ett kirurgiskt objekt

Detta bestäms under körning och kallas därför dynamisk eller körtidspolymorfism

Super nyckelord

Vad händer om treatPatient-metoden i Surgeon-klassen vill utföra den funktionalitet som definierats i Doctor-klass och sedan utföra sin egen specifika funktionalitet?
I det här fallet, nyckelord

superkan användas för att komma åt metoder för föräldraklassen från barnklassen.
TreatPatient-metoden i Surgeon-klassen kan skrivas som:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Nyckelordet super kan användas för att komma åt alla datamedlemmar eller metoder för superklassen i underklassen.Exempel: -Lär dig arv, polymorfism & super nyckelord

Steg 1) Kopiera följande kod till en 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");}}

Steg 2) Spara, kompilera och köra koden. Observera utdata.
Steg 3) Kommentarerader # 6-9. Spara, kompilera och kör koden. Observera utdata.
Steg 4) Kommentarrad # 10. Spara och kompilera koden.
Steg 5) Fel =? Detta beror på att underklassen inte kan komma åt privata medlemmar i superklassen.

Skillnad mellan statisk och dynamisk polymorfism

Statisk polymorfism Dynamisk polymorfism
Det avser metodöverbelastning. Det avser metodöverstyrning.

Fel, om några, löses vid sammanställningstidpunkten. Eftersom koden inte körs under kompilering, därav namnet statisk.

Ex:

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

Om en referensvariabel anropar en åsidosatt metod bestäms metoden som ska åberopas av objektet, din referensvariabel pekar på. Detta kan endast bestämmas vid körning när kod in under körning, därav namnet dynamisk.

Ex:

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