Polymorfisme i Java OOP'er med eksempel

Hvad er polymorfisme i Java?

Polymorfisme i Java opstår, når der er en eller flere klasser eller objekter, der er forbundet med hinanden ved arv. Med andre ord er det et objekts evne til at tage mange former. Arv giver brugerne mulighed for at arve attributter og metoder, og polymorfisme bruger disse metoder til at udføre forskellige opgaver. Så målet er kommunikation, men tilgangen er anderledes.

For eksempel har du en smartphone til kommunikation. Den kommunikationstilstand, du vælger, kan være hvad som helst. Det kan være et opkald, en tekstbesked, en billedbesked, mail osv. Så målet er fælles, nemlig kommunikation, men deres tilgang er anderledes. Dette kaldes polymorfisme.

I denne vejledning lærer du-

  • Hvad er polymorfisme?
  • Java polymorfisme i OOP'er med eksempel
  • Metode tilsidesættelse
  • Forskel mellem overbelastning og overstyring
  • Hvad er dynamisk polymorfisme?
  • Super nøgleord
  • Forskel mellem statisk og dynamisk polymorfisme

Klik her, hvis videoen ikke er tilgængelig

Java polymorfisme i OOP'er med eksempel

Vi har en overordnet klasse, 'Konto' med funktion af indbetaling og udbetaling. Kontoen har 2 underordnede klasser Driften af ​​indbetaling og udbetaling er den samme for at gemme og kontrollere konti. Så de arvede metoder fra Kontoklasse fungerer.

Ændring i softwarekrav

Der er en ændring i kravspecifikationen, noget der er så almindeligt i softwareindustrien. Du formodes at tilføje funktionalitetsprivilegeret bankkonto med overtrækningsfacilitet.

Som baggrund er overtræk en facilitet, hvor du kan trække et beløb, der er mere end den disponible saldo på din konto.

Så træk metoden tilbage til privilegerede behov for at blive implementeret på ny. Men du ændrer ikke det testede stykke kode i Savings and Checking account. Dette er fordelen ved OOPS

Trin 1) Sådan, at når "trukket" -metoden til at gemme konto kaldes, udføres en metode fra overordnet kontoklasse.

Trin 2) Men når "Udtræk" -metoden for den privilegerede konto (overtrækningsfacilitet) kaldes hævemetode, der er defineret i den privilegerede klasse, udføres. Dette er polymorfisme.

Metode tilsidesættelse

Metodeoverstyring omdefinerer en superklassemetode i en underklasse.

Regler for metodeoverskridelse

  • Metodesignaturen, dvs. metodens navn, parameterliste og returtype, skal matche nøjagtigt.
  • Den tilsidesatte metode kan udvide tilgængeligheden, men ikke indsnævre den, dvs. hvis den er privat i basisklassen, kan barneklassen offentliggøre den, 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();}}

Forskel mellem overbelastning og overstyring

Metode Overbelastning Metode tilsidesættelse

Metodeoverbelastning er i samme klasse, hvor mere end en metode har samme navn, men forskellige signaturer.

Metodeoverstyring er, når en af ​​metoderne i superklassen omdefineres i underklassen. I dette tilfælde forbliver metodens signatur 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}}

Hvad er dynamisk polymorfisme?

Dynamisk polymorfisme er den mekanisme, hvormed flere metoder kan defineres med samme navn og underskrift i superklassen og underklassen. Opkaldet til en tilsidesat metode løses på kørselstidspunktet.

Dynamisk polymorfisme Eksempel:

En referencevariabel for superklassen kan henvise til et underklasseobjekt

Doctor obj = new Surgeon();

Overvej udsagnet

obj.treatPatient();

Her er referencevariablen "obj" af den overordnede klasse, men det objekt, den peger på, er af underklassen (som vist i diagrammet).


obj.treatPatient () udfører behandlingspatient () -metoden i underklassen - Kirurg

Hvis en basisklassereference bruges til at kalde en metode, bestemmes den metode, der skal påberåbes af JVM, afhængigt af objektet, som referencen peger på

For eksempel, selvom obj er en henvisning til læge, kalder det metoden for kirurg, da den peger på et kirurgisk objekt

Dette bestemmes i løbet af kørselstiden og betegnes dermed dynamisk eller kørselstidspolymorfisme

Super nøgleord

Hvad hvis treatPatient-metoden i Surgeon-klassen ønsker at udføre den funktion, der er defineret i Doctor-klassen og derefter udføre sin egen specifikke funktionalitet?
I dette tilfælde nøgleord

superkan bruges til at få adgang til overordnede klasses metoder fra underordnet klasse.
TreatPatient-metoden i Surgeon-klassen kunne skrives som:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Nøgleordet super kan bruges til at få adgang til ethvert datamedlem eller metoder i superklassen i underklassen.Eksempel: -For at lære arv, polymorfisme & super nøgleord

Trin 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");}}

Trin 2) Gem, kompilér og kør koden. Overhold output.
Trin 3) Kommentarer linier nr. 6-9. Gem, kompilér og kør koden. Overhold output.
Trin 4) Kommentarlinje nr. 10. Gem og kompilér koden.
Trin 5) Fejl =? Dette skyldes, at underklasse ikke kan få adgang til private medlemmer af superklassen.

Forskel mellem statisk og dynamisk polymorfisme

Statisk polymorfisme Dynamisk polymorfisme
Det vedrører overbelastning af metoder. Det vedrører tilsidesættelse af metoden.

Fejl, hvis der er nogen, løses på kompileringstidspunktet. Da koden ikke udføres under kompilering, er 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 referencevariabel kalder en tilsidesat metode, bestemmes den metode, der skal påberåbes af objektet, din referencevariabel peger på. Dette kan kun bestemmes ved kørsel, når kode under udførelse, deraf navnet dynamisk.

Eks:

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

Interessante artikler...