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
super
kan 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(); |