Polymorfismi sisään Java (Staattinen ja dynaaminen)
Mitä polymorfismi sisältää Java?
polymorfismi in Java tapahtuu, kun yksi tai useampi luokka tai objekti liittyvät toisiinsa perinnöllisesti. Se on esineen kykyä ottaa monia muotoja. Periytys antaa käyttäjien periä attribuutteja ja menetelmiä, ja polymorfismi käyttää näitä menetelmiä eri tehtävien suorittamiseen. Tavoitteena on siis viestintä, mutta lähestymistapa on erilainen.
Sinulla on esimerkiksi älypuhelin viestintää varten. Valitsemasi viestintätapa voi olla mikä tahansa. Se voi olla puhelu, tekstiviesti, kuvaviesti, posti jne. Yhteinen tavoite on siis viestintä, mutta heidän lähestymistapansa on erilainen. Tätä kutsutaan Polymorfismi. Nyt opimme polymorfismia Java esimerkin kanssa.
Napauta tätä jos video ei ole saatavilla
Java Polymorfismi OOP:issa esimerkin kanssa
Meillä on yksi yläluokka, "tili", jolla on talletus- ja kotiutustoiminto. Tilillä on 2 lapsiluokkaa. Talletus- ja kotiutustoiminnot ovat samat talletus- ja shekkitileillä. Joten tililuokasta perityt menetelmät toimivat.
Ohjelmistovaatimusten muutos
Vaatimusmäärittelyssä on tapahtunut muutos, mikä on niin yleistä ohjelmistoteollisuudessa. Sinun pitäisi lisätä toiminnallinen etuoikeutettu pankkitili tilinylitysmahdollisuudella. Taustaa varten tilinylitys on ominaisuus, jossa voit nostaa enemmän kuin tilisi saldoa. Joten, peruuta menetelmä etuoikeutettujen tarpeiden toteuttamiseksi uudelleen. Et kuitenkaan muuta testattua koodia Säästö- ja sekkitilillä. Tämä on etu OHO
Vaihe 1) Sellaista, että kun säästötilin "poistettua" menetelmää kutsutaan, suoritetaan menetelmä päätililuokasta
Vaihe 2) Mutta kun etuoikeutetun tilin (tilinylitys) "nosto"-menetelmää kutsutaan etuoikeutetussa luokassa määritetty nostomenetelmä suoritetaan. Tämä on Polymorfismi OOP:issa.
Menetelmän ohittaminen Java
Method Overriding on superluokan menetelmän uudelleenmäärittely alaluokassa.
Menetelmän ohittamista koskevat säännöt
- Metodin allekirjoituksen eli menetelmän nimen, parametriluettelon ja palautustyypin on vastattava täsmälleen.
- Ohitettu menetelmä voi laajentaa saavutettavuutta, mutta ei kaventaa sitä, eli jos se on perusluokassa yksityinen, aliluokka 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 executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
Ero ylikuormituksen ja ohituksen välillä
Metodin ylikuormitus on samassa luokassa, jossa useammalla kuin yhdellä menetelmällä on sama nimi, mutta eri allekirjoitukset. | Metodin ohittaminen on, kun yksi superluokan menetelmistä määritetään uudelleen alaluokassa. Tässä tapauksessa menetelmän allekirjoitus pysyy samana. |
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 } } |
Mikä on dynaaminen polymorfismi?
Dynaaminen polymorfismi OOP:issa on mekanismi, jolla voidaan määrittää useita menetelmiä samalla nimellä ja allekirjoituksella superluokassa ja alaluokassa. Kutsu ohitettuun metodiin ratkaistaan ajon aikana.
Esimerkki dynaamisesta polymorfismista:
Superluokan viitemuuttuja voi viitata alaluokan objektiin
Doctor obj = new Surgeon();
Harkitse lausuntoa
obj.treatPatient();
Tässä viitemuuttuja “obj” on emoluokkaa, mutta objekti, johon se osoittaa, on aliluokkaa (kuten alla olevassa polymorfismin kaavioesimerkissä näkyy).
obj.treatPatient() suorittaa alaluokan - Surgeon -menetelmän treatPatient()
Jos menetelmän kutsumiseen käytetään perusluokan viittausta, JVM päättää kutsuttavan menetelmän riippuen objektista, johon viittaus osoittaa.
Esimerkiksi vaikka obj on viittaus lääkäriin, se kutsuu menetelmää Surgeon, koska se osoittaa kirurgin objektiin
Tämä päätetään ajon aikana, ja siksi sitä kutsutaan nimellä dynaaminen or ajonaikainen polymorfismi
Ero staattisen ja dynaamisen polymorfismin välillä
Staattinen polymorfismi sisään Java on polymorfismin tyyppi, joka kerää tiedot menetelmän kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi on eräänlainen polymorfismi, joka kerää tiedot menetelmän kutsua varten ajon aikana.
Se liittyy menetelmän ylikuormitukseen. | Se liittyy menetelmän ohittamiseen. |
Mahdolliset virheet korjataan käännösvaiheessa. Koska koodia ei suoriteta kääntämisen aikana, nimi on staattinen.
ex: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Jos viitemuuttuja kutsuu ohitettua menetelmää, kutsuttavan menetelmän määrittää objekti, johon viitemuuttujasi osoittaa. Tämä voidaan määrittää vain ajon aikana, kun koodia suoritetaan, joten nimi on dynaaminen.
ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Superavainsana sisään Java
Entä jos Surgeon-luokan treatPatient-menetelmä haluaa suorittaa Doctor-luokassa määritellyt toiminnot ja suorittaa sitten oman toiminnallisuutensa? Tässä tapauksessa avainsana super
voidaan käyttää pääluokan menetelmien avaamiseen lapsiluokasta. Hoitopotilasmenetelmä Surgeon-luokassa voitaisiin kirjoittaa seuraavasti:
treatPatient(){ super.treatPatient(); //add code specific to Surgeon }
Avainsanalla super voidaan käyttää mitä tahansa aliluokan superluokan datajäsentä tai menetelmiä.
Seuraavaksi opimme Super-avainsanasta, Perintö ja polymorfismi sisällä Java esimerkkiohjelmilla.
Esimerkki: - Perinnön, polymorfismin ja superavainsanan oppiminen
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 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"); } }
Vaihe 2) Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.
Vaihe 3) Kommentoi rivit 6-9. Tallenna, käännä ja suorita koodi. Tarkkaile lähtöä.
Vaihe 4) Kommentoinnin poisto rivi #10. Tallenna ja käännä koodi.
Vaihe 5) Virhe =? Tämä johtuu siitä, että alaluokka ei voi käyttää superluokan yksityisiä jäseniä.
Yhteenveto
- Olioohjelmoinnin polymorfia ilmenee, kun yksi tai useampi luokka tai objekti liittyvät toisiinsa perinnöllisesti. Se on esineen kykyä ottaa monia muotoja.
- Method Overriding on superluokan menetelmän uudelleenmäärittely alaluokassa.
- Dynaaminen polymorfismi sisään Java on mekanismi, jolla voidaan määrittää useita menetelmiä samalla nimellä ja allekirjoituksella superluokassa ja alaluokassa.
- Staattinen polymorfismi sisään Java on polymorfismin tyyppi, joka kerää tiedot menetelmän kutsumiseksi käännöshetkellä, kun taas dynaaminen polymorfismi on eräänlainen polymorfismi, joka kerää tiedot menetelmän kutsua varten ajon aikana.
- Super-avainsanalla voidaan päästä pääluokan menetelmiin lapsiluokasta.