Polymorfismi Java OOP: issa esimerkin avulla

Mikä on Java-polymorfismi?

Java-polymorfismi esiintyy, kun on olemassa yksi tai useampi luokka tai objekti, jotka liittyvät toisiinsa perinnöllä. Toisin sanoen se on kohteen kyky ottaa monia muotoja. Perintö antaa käyttäjien periä määritteet ja menetelmät, ja polymorfismi käyttää näitä menetelmiä erilaisten tehtävien suorittamiseen. Joten tavoite on viestintä, mutta lähestymistapa on erilainen.

Esimerkiksi sinulla on älypuhelin viestintään. Valitsemasi viestintätila voi olla mikä tahansa. Se voi olla puhelu, tekstiviesti, kuvaviesti, posti jne. Joten tavoite on yhteinen eli viestintä, mutta heidän lähestymistapansa on erilainen. Tätä kutsutaan polymorfismiksi.

Tässä opetusohjelmassa opit-

  • Mikä on polymorfismi?
  • Java-polymorfismi OOP: n esimerkissä
  • Menetelmän ohittaminen
  • Ero ylikuormituksen ja ohituksen välillä
  • Mikä on dynaaminen polymorfismi?
  • Super Avainsana
  • Staattisen ja dynaamisen polymorfismin ero

Napsauta tätä, jos video ei ole käytettävissä

Java-polymorfismi OOP: n esimerkissä

Meillä on yksi vanhempaluokka, 'Tili', jolla on talletus- ja nostotoiminto. Tilillä on 2 alaluokkaa Talletuksen ja kotiutuksen toiminta on sama tilien tallentamisessa ja tarkistamisessa. Joten tililuokasta perityt menetelmät toimivat.

Muutos ohjelmistovaatimuksissa

Vaatimusmäärittelyssä on tapahtunut muutos, mikä on niin yleistä ohjelmistoteollisuudessa. Sinun on tarkoitus lisätä etuoikeutettu pankkitili Overdraf-järjestelyyn.

Taustalimiitti on järjestely, jossa voit nostaa summan, joka ylittää tililläsi olevan saldon.

Joten, vedä menetelmä etuoikeutettujen tarpeiden toteuttamiseksi uudelleen. Mutta et vaihda testattua koodikoodia Säästö- ja tarkkailutilillä. Tämä on OOPS: n etu

Vaihe 1) Sellainen, että kun "peruutettua" menetelmää tilin tallentamiseksi kutsutaan, menetelmä vanhemman tilin luokasta suoritetaan.

Vaihe 2) Mutta kun etuoikeutetun tilin "peruutus" -menetelmää (tililimiitti) kutsutaan peruutusmenetelmäksi, suoritetaan etuoikeutetussa luokassa. Tämä on polymorfismi.

Menetelmän ohittaminen

Method Overriding on superluokan menetelmän uudelleenmäärittely alaluokassa.

Menetelmän ohittamisen säännöt

  • Menetelmän allekirjoituksen eli menetelmän nimen, parametriluettelon ja palautustyypin on vastattava tarkalleen.
  • Ohitettu menetelmä voi laajentaa esteettömyyttä, mutta ei kaventaa sitä, eli jos se on yksityinen perusluokassa, lapsiluokka voi tehdä siitä julkisen, mutta ei päinvastoin.

Esimerkki

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

Ero ylikuormituksen ja ohituksen välillä

Menetelmä Ylikuormitus Menetelmän ohittaminen

Menetelmän ylikuormitus on samassa luokassa, jossa useammalla kuin yhdellä menetelmällä on sama nimi, mutta erilaiset allekirjoitukset.

Menetelmän ohittaminen on, kun yksi superluokan menetelmistä määritellään uudelleen alaluokassa. Tällöin menetelmän allekirjoitus pysyy samana.

Esim .:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Esim .:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

Mikä on dynaaminen polymorfismi?

Dynaaminen polymorfismi on mekanismi, jolla useita menetelmiä voidaan määritellä samalla nimellä ja allekirjoituksella yliluokassa ja alaluokassa. Kutsu ohitettuun menetelmään ratkaistaan ​​ajon aikana.

Dynaaminen polymorfismi Esimerkki:

Yläluokan viitemuuttuja voi viitata alaluokan objektiin

Doctor obj = new Surgeon();

Harkitse lausuntoa

obj.treatPatient();

Tässä viitemuuttuja "obj" kuuluu vanhempaluokkaan, mutta kohde, johon se osoittaa, on alaluokka (kuten kaaviossa on esitetty).


obj.treatPatient () suorittaa aliluokan treatmentPatient () -menetelmän - Kirurgi

Jos menetelmän kutsumiseen käytetään perusluokan viitettä, JVM päättää kutsuttavasta menetelmästä riippuen objektista, johon viite osoittaa

Vaikka obj on esimerkiksi viittaus lääkäriin, se kutsuu kirurgin menetelmää, koska se osoittaa kirurgiobjektiin

Tämä päätetään ajon aikana, ja siksi sitä kutsutaan dynaamiseksi tai ajonaikaiseksi polymorfismiksi

Super Avainsana

Mitä jos Surgeon-luokan treatPatient-menetelmä haluaa suorittaa Doctor-luokassa määritellyt toiminnot ja suorittaa sitten omat toiminnot?
Tässä tapauksessa avainsana

supervoidaan käyttää pääsyn vanhempien luokan menetelmiin lapsiluokasta.
Surgeon-luokan TreatPatient-menetelmä voidaan kirjoittaa seuraavasti:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Avainsanalla super voidaan käyttää mitä tahansa alaluokan superluokan datajäsentä tai menetelmiä.Esimerkki: - Perinnöllisyyden, polymorfismin ja superavainsanan oppimiseksi

Vaihe 1) Kopioi seuraava koodi editoriin

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

Vaihe 2) Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.
Vaihe 3) Kommenttien poistaminen riviltä # 6-9. Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.
Vaihe 4) Kommentoimatta jättäminen rivi # 10. Tallenna ja koota koodi.
Vaihe 5) Virhe =? Tämä johtuu siitä, että alaluokka ei voi käyttää superluokan yksityisiä jäseniä.

Staattisen ja dynaamisen polymorfismin ero

Staattinen polymorfismi Dynaaminen polymorfismi
Se liittyy menetelmän ylikuormitukseen. Se liittyy menetelmän ohittamiseen.

Mahdolliset virheet korjataan käännöksen yhteydessä. Koska koodia ei suoriteta kääntämisen aikana, nimi on siis staattinen.

Esim .:

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

Jos referenssimuuttuja kutsuu ohitettua menetelmää, objekti määrittää kutsuttavan menetelmän, johon viitemuuttuja osoittaa. Tämä voidaan määrittää vain ajon aikana, kun koodi on suorituksessa, joten nimi on dynaaminen.

Esim .:

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

Mielenkiintoisia artikkeleita...