Polymorfismi sisään Java (Staattinen ja dynaaminen)
⚡ Älykäs yhteenveto
Polymorfismi sisään Java mahdollistaa yhden käyttöliittymän edustaa useita lomakkeita, joten yksi metodin nimi käyttäytyy eri tavalla toisiinsa liittyvien luokkien välillä. Se on oliopohjaisen suunnittelun pilari, joka edistää joustavuutta, koodin uudelleenkäyttöä ja perinteisten pankki-, lääketieteellisten ja yritysjärjestelmien selkeää laajentamista.

Mitä polymorfismi sisältää Java?
Polymorfismi sisään Java Perinnöllisyys eli polymorfismi tapahtuu, kun yksi tai useampi luokka tai objekti liittyy toisiinsa periytymisen kautta. Se on objektin kyky ottaa monia muotoja. Perintä antaa käyttäjien periä ominaisuuksia ja metodeja, ja polymorfismi käyttää näitä metodeja erilaisten tehtävien suorittamiseen. Tavoitteena on kommunikointi, vaikka lähestymistapa voi vaihdella.
Esimerkiksi älypuhelinta käytetään viestintään. Viestintätapa voi olla puhelu, tekstiviesti, kuvaviesti tai sähköposti. Tavoite on yhteinen, eli viestintä, mutta lähestymistapa on erilainen. Tämä käyttäytyminen on ydin polymorfismiNyt opimme polymorfismin Java esimerkkikoodilla, kaavioilla ja vaiheittaisilla selityksillä.
Napauta täältä jos video ei ole saatavilla
Miksi polymorfismia käytetään Java?
Polymorfismi sisään Java käytetään, koska se tekee koodista joustavaa, uudelleenkäytettävää ja helpommin ylläpidettävää. Yksi päätyypin viittausmuuttuja voi osoittaa useisiin aliobjekteihin, joten sama kutsu mukautuu mihin tahansa annettuun alaluokkaan. Tämä malli pitää testatun koodin koskemattomana, kun taas uutta toimintaa lisätään erikoistuneiden alaluokkien kautta, minkä vuoksi kehykset, kuten Spring ja Jakarta EE, ovat riippuvaisia siitä.
Java Polymorfismi OOP:issa esimerkin kanssa
Tarkastellaan yhtä yläluokkaa nimeltä Tili funktioilla talletusta ja nostoa varten. Tili-luokalla on kaksi aliluokkaa. Talletus- ja nostooperaatiot ovat samat sekä säästö- että käyttötileille, joten Tili-luokasta perityt metodit toimivat.
Java Esimerkki polymorfismista
Ohjelmistovaatimusten muutos
Vaatimusmäärittelyssä on muutos, mikä on yleistä ohjelmistoalalla. Tilinylitysmahdollisuudella varustetun etuoikeutetun pankkitilin toiminnallisuus on lisättävä. Tilinylitys on ominaisuus, jossa asiakas voi nostaa tilillä käytettävissä olevaa saldoa suuremman summan. Etuoikeutetun tilin nostomenetelmä vaatii uuden toteutuksen, kun taas säästö- ja käyttötilien testattua koodia ei muuteta. Tämä eristäminen on sen etu, että OHO.
Vaihe 1) Kun säästötiliä varten kutsutaan nostometodia, suoritetaan päätilin luokassa määritelty metodi.
Vaihe 2) Kun etuoikeutetun tilin (tililimiitin) nosto-metodia kutsutaan, suoritetaan etuoikeutetussa luokassa määritelty nosto-metodi. Tämä lähetys on Polymorfismi OOP-rakenteissa.
Menetelmän ohittaminen Java
Metodin korvaaminen on prosessi, jossa yläluokan metodi määritellään uudelleen aliluokan sisällä. Alaluokka säilyttää saman metodin.tract, mutta tarjoaa uuden toteutuksen, joka valitaan ohjelman suorituksen yhteydessä.
Menetelmän ohittamista koskevat säännöt
- Metodin allekirjoituksen eli metodin nimen, parametrilistan ja paluutyypin on oltava täsmälleen samat.
- Ohitettu metodi voi laajentaa saavutettavuutta, mutta se ei voi rajata sitä. Jos metodi on yksityinen perusluokassa, lapsiluokka voi tehdä siitä julkisen, mutta ei toisinpäin.
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 menetelmän ylikuormituksen ja menetelmän ohittamisen välillä
Metodin ylikuormitus tapahtuu saman luokan sisällä, mutta samalla metodin nimellä, mutta eri allekirjoituksilla. Metodin ohitus tapahtuu ylä- ja alaluokkasuhteessa, jossa aliluokka määrittelee uudelleen yläluokassa ilmoitetun metodin.
| Metodin ylikuormitus (Method Overloading) kuuluu samaan luokkaan, jossa useammalla kuin yhdellä metodilla on sama nimi, mutta eri allekirjoitukset. | Metodin ohittaminen tarkoittaa, että jokin yliluokan metodeista määritellään uudelleen alikategoriassa. Tässä tapauksessa metodin 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-metodeissa on mekanismi, jolla useita metodeja voidaan määritellä samalla nimellä ja allekirjoituksella sekä superluokassa että alikategoriassa. Kutsu ohitettuun metodiin ratkaistaan ajonaikana dynaamisen sidonnan avulla JVM:n sisällä.
Dynaaminen polymorfismiesimerkki
Yläluokan viitemuuttuja voi viitata aliluokan objektiin:
Doctor obj = new Surgeon();
Harkitse lausuntoa:
obj.treatPatient();
Tässä vertailumuuttuja obj kuuluu pääluokkaan, mutta objekti, johon se osoittaa, kuuluu lapsiluokkaan, kuten polymorfismikaaviossa on esitetty.
Soitto obj.treatPatient() suorittaa Surgeon-alaluokan treatPatient()-metodin. Kun metodia kutsutaan perusluokan viittauksen avulla, JVM päättää kutsuttavan metodin sen todellisen objektin perusteella, johon viittaus osoittaa. Vaikka obj on viittaus Doctor-olioon, se kutsuu Surgeon-metodia, koska se viittaa Surgeon-olioon. Päätös tehdään ajonaikana, minkä vuoksi sitä kutsutaan Dynaaminen polymorfismi tai ajonaikaista polymorfismia.
Ero staattisen ja dynaamisen polymorfismin välillä
Staattinen polymorfismi sisään Java on polymorfismityyppi, joka kerää tiedot metodin kutsumiseksi käännösaikana, kun taas dynaaminen polymorfismi on polymorfismityyppi, joka kerää tiedot metodin kutsumiseksi suorituksen aikana.
| Se liittyy metodin ylikuormitukseen. | Se liittyy metodin ohittamiseen. |
| Mahdolliset virheet korjataan käännösaikana. Koska koodia ei suoriteta käännöksen 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. |
Kun viittausmuuttuja kutsuu ohitettua metodia, kutsuttava metodi määräytyy sen objektin mukaan, johon viittausmuuttuja osoittaa. Tämä voidaan määrittää vain ajonaikana, kun koodia suoritetaan, minkä vuoksi 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-metodi haluaa suorittaa Doctor-luokassa määritellyn toiminnallisuuden ja sitten toimia omalla tavallaan? 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
}
Avainsanaa super voidaan käyttää minkä tahansa yliluokan datajäsenen tai metodin käyttämiseen aliluokan sisällä. Seuraavaksi tutustumme super-avainsanaan, Perintöja polymorfismi Java esimerkkiohjelmilla.
Esimerkki: Perinnöllisyyden, polymorfismin ja super-avainsanan 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(){ // overridden 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 tulostetta.
Vaihe 3) Poista kommentit riveiltä 6–9. Tallenna, käännä ja suorita koodi. Tarkkaile tulostetta.
Vaihe 4) Poista kommentti riviltä 10. Tallenna ja käännä koodi.
Vaihe 5) Virhe = ? Tämä johtuu siitä, että aliluokka ei voi käyttää yliluokan yksityisiä jäseniä.





