Hva er polymorfisme i Java?
Polymorfisme i Java oppstår når det er en eller flere klasser eller objekter relatert til hverandre ved arv. Med andre ord er det et objekts evne til å ta mange former. Arv lar brukerne arve attributter og metoder, og polymorfisme bruker disse metodene for å utføre forskjellige oppgaver. Så målet er kommunikasjon, men tilnærmingen er annerledes.
For eksempel har du en smarttelefon for kommunikasjon. Kommunikasjonsmodusen du velger kan være hva som helst. Det kan være en samtale, en tekstmelding, en bildemelding, e-post osv. Så, målet er vanlig at det er kommunikasjon, men deres tilnærming er annerledes. Dette kalles polymorfisme.
I denne veiledningen vil du lære-
- Hva er polymorfisme?
- Java polymorfisme i OOP med eksempel
- Metodeoverstyring
- Forskjellen mellom overbelastning og overstyring
- Hva er dynamisk polymorfisme?
- Super Keyword
- Forskjellen mellom statisk og dynamisk polymorfisme
Klikk her hvis videoen ikke er tilgjengelig
Java polymorfisme i OOP med eksempel
Vi har en overordnet klasse, 'Konto' med funksjon av innskudd og uttak. Kontoen har to barneklasser Driften av innskudd og uttak er den samme for lagring og kontroll av kontoer. Så de arvede metodene fra kontoklassen vil fungere.Endring i programvarekrav
Det er en endring i kravspesifikasjonen, noe som er så vanlig i programvareindustrien. Du skal legge til funksjonalitetsprivilegert bankkonto med kassakreditt.
Som bakgrunn er kassekreditt et anlegg der du kan ta ut et beløp som er mer enn tilgjengelig saldoen på kontoen din.
Så trekk metoden for privilegerte behov for å implementeres på nytt. Men du endrer ikke den testede koden i Savings and Checking account. Dette er fordelen med OOPS
Trinn 1) Slik at når "trukket" -metoden for lagring av konto kalles, blir en metode fra overordnet kontoklasse utført.
Trinn 2) Men når "Uttak" -metoden for den privilegerte kontoen (kassakreditt) kalles uttaksmetoden som er definert i den privilegerte klassen, utføres. Dette er polymorfisme.
Metodeoverstyring
Metodeoverstyring er å omdefinere en superklassemetode i en underklasse.
Regler for metodeoverstyring
- Metodesignaturen, dvs. metodens navn, parameterliste og returtype, må samsvare nøyaktig.
- Den overstyrte metoden kan utvide tilgjengeligheten, men ikke begrense den, dvs. hvis den er privat i basisklassen, kan barneklassen gjøre den offentlig, men ikke omvendt.
Eksempel
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();}}
Forskjellen mellom overbelastning og overstyring
Metode Overbelastning | Metodeoverstyring |
---|---|
Metodeoverbelastning er i samme klasse, hvor mer enn én metode har samme navn, men forskjellige signaturer. |
Metodeoverstyring er når en av metodene i superklassen omdefineres i underklassen. I dette tilfellet forblir signaturen til metoden den samme. |
Eks: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Eks: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Hva er dynamisk polymorfisme?
Dynamisk polymorfisme er mekanismen ved hvilken flere metoder kan defineres med samme navn og signatur i superklassen og underklassen. Anropet til en overstyrt metode løses på kjøretid.
Dynamisk polymorfisme Eksempel:
En referansevariabel for superklassen kan referere til et underklasseobjekt
Doctor obj = new Surgeon();
Tenk på uttalelsen
obj.treatPatient();
Her er referansevariabelen "obj" fra overordnet klasse, men objektet den peker på er av underordnet klasse (som vist i diagrammet).
obj.treatPatient () vil utføre treatPatient () -metoden til underklassen - Kirurg
Hvis en basisklassereferanse brukes til å kalle en metode, bestemmes metoden som skal påberopes av JVM, avhengig av objektet referansen peker på
For eksempel, selv om obj er en referanse til lege, kaller den metoden for kirurg, da den peker mot et kirurgobjekt
Dette avgjøres i løpet av kjøretiden og blir derfor betegnet som dynamisk eller kjøretid polymorfisme
Super Keyword
Hva om treatPatient-metoden i Surgeon-klassen ønsker å utføre funksjonaliteten som er definert i Doctor-klassen og deretter utføre sin egen spesifikke funksjonalitet?
I dette tilfellet nøkkelord
super
kan brukes til å få tilgang til metodene til foreldreklassen fra barneklassen.TreatPatient-metoden i Surgeon-klassen kan skrives som:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
Nøkkelordet super kan brukes til å få tilgang til ethvert datamedlem eller metoder i superklassen i underklassen.Eksempel: -For å lære arv, polymorfisme og super søkeord
Trinn 1) Kopier følgende kode til 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");}}
Trinn 2) Lagre, kompiler og kjør koden. Observer utdataene.
Trinn 3) Kommentarer linjene 6-9. Lagre, kompiler og kjør koden. Observer utdataene.
Trinn 4) Kommentarlinje # 10. Lagre og kompiler koden.
Trinn 5) Feil =? Dette er fordi underklassen ikke får tilgang til private medlemmer av superklassen.
Forskjellen mellom statisk og dynamisk polymorfisme
Statisk polymorfisme | Dynamisk polymorfisme |
---|---|
Det er relatert til metodeoverbelastning. | Det er relatert til metodeoverstyring. |
Feil, hvis noen, løses på kompileringstidspunktet. Siden koden ikke kjøres under kompilering, derav navnet statisk. Eks: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
Hvis en referansevariabel kaller en overstyrt metode, bestemmes metoden som skal påberopes av objektet, og referansevariabelen din peker på. Dette kan bare bestemmes ved kjøretid når kode er under utførelse, derav navnet dynamisk. Eks: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |