Polymorfisme i Java (Statisk og dynamisk)
Hva er polymorfisme i Java?
polymorfisme in Java oppstår når det er en eller flere klasser eller objekter knyttet til hverandre ved arv. Det er evnen til et objekt til å ta mange former. Arv lar brukere arve attributter og metoder, og polymorfisme bruker disse metodene til å 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, det er kommunikasjon, men deres tilnærming er annerledes. Dette kalles Polymorfisme. Nå skal vi lære polymorfisme i Java med eksempel.
Klikk her. hvis videoen ikke er tilgjengelig
Java Polymorfisme i OOP-er med eksempel
Vi har en foreldreklasse, 'Konto' med funksjon av innskudd og uttak. Kontoen har 2 barneklasser. Driften av innskudd og uttak er den samme for spare- og sjekkkontoer. Så de nedarvede 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 kassekreditt. For en bakgrunn er kassekreditt en fasilitet hvor du kan ta ut et beløp mer enn tilgjengelig saldo på kontoen din. Så, trekke tilbake metode for privilegerte behov implementert på nytt. Men du endrer ikke den testede kodebiten i Spare- og brukskonto. Dette er fordelen med OOPS
Trinn 1) Slik at når "uttaksmetoden" for å spare konto kalles, blir en metode fra overordnet kontoklasse utført
Trinn 2) Men når "Uttak"-metoden for den privilegerte kontoen (kassekreditt) kalles, blir uttaksmetoden definert i den privilegerte klassen utført. Dette er Polymorfisme i OOPs.
Metode Overstyring inn Java
Metodeoverstyring er å redefinere en superklassemetode i en underklasse.
Regler for metodeoverstyring
- Metodesignaturen dvs. metodenavn, 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 executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
Forskjellen mellom overbelastning og overstyring
Metodeoverbelastning er i samme klasse, der 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. |
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 } } |
Hva er dynamisk polymorfisme?
Dynamisk polymorfisme i OOPs er mekanismen der flere metoder kan defineres med samme navn og signatur i superklassen og underklassen. Anropet til en overstyrt metode løses under kjøring.
Eksempel på dynamisk polymorfisme:
En referansevariabel for superklassen kan referere til et subklasseobjekt
Doctor obj = new Surgeon();
Vurder utsagnet
obj.treatPatient();
Her er referansevariabelen "obj" av den overordnede klassen, men objektet den peker på er av barneklassen (som vist i diagrammet nedenfor for polymorfisme).
obj.treatPatient() vil utføre treatPatient()-metoden for underklassen – Surgeon
Hvis en baseklassereferanse brukes til å kalle en metode, bestemmes metoden som skal påkalles av JVM, avhengig av objektet referansen peker til
For eksempel, selv om obj er en referanse til Doctor, kaller den metoden til Surgeon, da den peker på et Surgeon-objekt
Dette bestemmes i løpet av kjøretiden og betegnes derfor dynamisk or kjøretidspolymorfisme
Forskjellen mellom statisk og dynamisk polymorfisme
Statisk polymorfisme i Java er en type polymorfisme som samler informasjonen for å kalle en metode på kompileringstidspunktet, mens dynamisk polymorfisme er en type polymorfisme som samler informasjonen for å kalle en metode ved kjøring.
Det er relatert til metodeoverbelastning. | Det gjelder metodeoverstyring. |
Eventuelle feil løses på kompileringstidspunktet. Siden koden ikke kjøres under kompilering, derav navnet static.
ex: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
I tilfelle en referansevariabel kaller en overstyrt metode, bestemmes metoden som skal påkalles av objektet referansevariabelen din peker på. Dette kan bare bestemmes under kjøring når koden er under utførelse, derav navnet dynamisk.
ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Super nøkkelord i Java
Hva om treatPatient-metoden i Surgeon-klassen ønsker å utføre funksjonaliteten definert i Doctor-klassen og deretter utføre sin egen spesifikke funksjonalitet? I dette tilfellet, nøkkelord super
kan brukes til å få tilgang til metoder for overordnet klasse fra barneklassen. Behandlingspasientmetoden i Surgeon-klassen kan skrives som:
treatPatient(){ super.treatPatient(); //add code specific to Surgeon }
Nøkkelordet super kan brukes for å få tilgang til alle datamedlem eller metoder for superklassen i underklassen.
Deretter skal vi lære om Super søkeord, Arv og polymorfisme i Java med eksempelprogrammer.
Eksempel:-For å lære arv, polymorfisme og supernøkkelord
Trinn 1) Kopier følgende kode inn i 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 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"); } }
Trinn 2) Lagre, kompiler og kjør koden. Observer utgangen.
Trinn 3) Fjern kommentarer linje 6-9. Lagre, kompiler og kjør koden. Observer utgangen.
Trinn 4) Fjern kommentar linje #10. Lagre og kompiler koden.
Trinn 5) Feil = ? Dette er fordi underklassen ikke kan få tilgang til private medlemmer av superklassen.
Sammendrag
- Polymorfisme i objektorientert programmering oppstår når det er en eller flere klasser eller objekter knyttet til hverandre ved arv. Det er evnen til et objekt til å ta mange former.
- Metodeoverstyring er å redefinere en superklassemetode i en underklasse.
- Dynamisk polymorfisme i Java er mekanismen der flere metoder kan defineres med samme navn og signatur i superklassen og underklassen.
- Statisk polymorfisme i Java er en type polymorfisme som samler informasjonen for å kalle en metode på kompileringstidspunktet, mens dynamisk polymorfisme er en type polymorfisme som samler informasjonen for å kalle en metode ved kjøring.
- Supernøkkelord kan brukes for å få tilgang til metoder for overordnet klasse fra barneklassen.