Polümorfism sisse Java (staatiline ja dünaamiline)
Mis on polümorfism Java?
Polümorfism in Java tekib siis, kui üks või mitu klassi või objekti on üksteisega pärimise teel seotud. See on objekti võime võtta mitmesuguseid vorme. Pärimine võimaldab kasutajatel pärida atribuute ja meetodeid ning polümorfism kasutab neid meetodeid erinevate ülesannete täitmiseks. Niisiis, eesmärk on suhtlemine, kuid lähenemine on erinev.
Näiteks on teil suhtlemiseks nutitelefon. Teie valitud suhtlusviis võib olla ükskõik milline. See võib olla kõne, tekstisõnum, piltsõnum, e-post jne. Seega on eesmärk ühine, mis on suhtlemine, kuid nende lähenemine on erinev. Seda nimetatakse Polümorfism. Nüüd õpime polümorfismi Java eeskujuga.
Click siin kui video pole juurdepääsetav
Java Polümorfism OOP-des koos näitega
Meil on üks vanemklass, sissemakse ja väljamakse funktsiooniga konto. Kontol on 2 lasteklassi. Sisse- ja väljamakse toiming on kogumis- ja arvelduskontode puhul sama. Seega töötavad Konto klassi päritud meetodid.
Tarkvaranõuete muudatus
Nõuete spetsifikatsioon on muutunud, mis on tarkvaratööstuses nii tavaline. Peate lisama arvelduskrediidi funktsiooniga privilegeeritud pangakonto. Taustaks on arvelduskrediit, mille abil saate välja võtta summa, mis on suurem kui teie konto saldo. Seega eemaldage privilegeeritud vajaduste jaoks mõeldud meetod uuesti juurutamiseks. Kuid te ei muuda kogumis- ja arvelduskontol testitud koodi. See on eelis OOPS
Step 1) Selline, et kui kutsutakse säästukonto "välja võetud" meetod, käivitatakse emakonto klassi meetod
Step 2) Kuid kui privilegeeritud konto (arvelduskrediidi) meetodit "Tühjendamine" nimetatakse, siis privilegeeritud klassis määratletud väljavõtmise meetod käivitatakse. See on Polümorfism OOP-des.
Meetod alistamine sisse Java
Meetodi alistamine on superklassi meetodi ümberdefineerimine alamklassis.
Meetodi alistamise reeglid
- Meetodi signatuur, st meetodi nimi, parameetrite loend ja tagastustüüp peavad täpselt ühtima.
- Alistatav meetod võib juurdepääsetavust laiendada, kuid mitte kitsendada, st kui see on põhiklassis privaatne, saab alamklass selle avalikuks teha, kuid mitte vastupidi.
Näide
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(); } }
Erinevus ülekoormuse ja alistamise vahel
Meetodi ülekoormus on samas klassis, kus rohkem kui ühel meetodil on sama nimi, kuid erinevad allkirjad. | Meetodi alistamine on siis, kui üks superklassi meetoditest määratletakse alamklassis uuesti. Sel juhul jääb meetodi allkiri samaks. |
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 } } |
Mis on dünaamiline polümorfism?
OOP-ide dünaamiline polümorfism on mehhanism, mille abil saab defineerida mitut meetodit sama nime ja allkirjaga ülemklassis ja alamklassis. Ülekirjutatud meetodi kutse lahendatakse käitusajal.
Dünaamilise polümorfismi näide:
Superklassi viitemuutuja võib viidata alamklassi objektile
Doctor obj = new Surgeon();
Mõelge avaldusele
obj.treatPatient();
Siin on viitemuutuja "obj" põhiklassist, kuid objekt, millele see osutab, on alamklassist (nagu on näidatud allolevas polümorfismi diagrammi näites).
obj.treatPatient() käivitab raviPatient() meetodi alamklassist – Surgeon
Kui meetodi kutsumiseks kasutatakse baasklassi viidet, otsustab JVM, millist meetodit kutsutakse, olenevalt objektist, millele viide osutab.
Näiteks kuigi obj on viide arstile, kutsub see meetodit Surgeon, kuna see osutab kirurgi objektile
See otsustatakse tööaja jooksul ja seetõttu nimetatakse seda dünaamiline or käitusaegne polümorfism
Staatilise ja dünaamilise polümorfismi erinevus
Staatiline polümorfism sisse Java on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks kompileerimise ajal, samas kui dünaamiline polümorfism on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks käitusajal.
See on seotud meetodi ülekoormamisega. | See on seotud meetodi tühistamisega. |
Vead, kui neid on, lahendatakse kompileerimise ajal. Kuna koodi kompileerimise ajal ei käivitata, siis nimi staatiline.
ex: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Kui viitemuutuja kutsub välja tühistatud meetodi, määrab kutsutava meetodi objekt, millele viitab teie võrdlusmuutuja. Seda saab määrata ainult käitusajal, kui kood on täitmisel, sellest ka nimi dünaamiline.
ex: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Supermärksõna sisse Java
Mis saab siis, kui Surgeon klassi raviPatsiendi meetod soovib käivitada klassis Doctor määratletud funktsionaalsust ja seejärel täita oma spetsiifilist funktsiooni? Sel juhul märksõna super
saab kasutada vanemklassi meetoditele juurdepääsuks alamklassist. Kirurgi klassi ravipatsiendi meetodi võiks kirjutada järgmiselt:
treatPatient(){ super.treatPatient(); //add code specific to Surgeon }
Märksõna super saab kasutada alamklassi igale superklassi andmeliikmele või meetoditele juurdepääsuks.
Järgmisena tutvume märksõnaga Super, Pärisosa ja polümorfism sisse Java näidisprogrammidega.
Näide: pärimise, polümorfismi ja super märksõna õppimiseks
Step 1) Kopeerige järgmine kood redaktorisse
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"); } }
Step 2) Salvestage, kompileerige ja käivitage kood. Jälgige väljundit.
Step 3) Tühista read # 6-9. Salvestage, kompileerige ja käivitage kood. Jälgige väljundit.
Step 4) Kommentaaride tühistamise rida nr 10. Salvestage ja kompileerige kood.
Step 5) Viga =? Seda seetõttu, et alamklass ei pääse juurde superklassi eraliikmetele.
kokkuvõte
- Objektorienteeritud programmeerimise polümorfism ilmneb siis, kui üks või mitu klassi või objekti on üksteisega pärimise teel seotud. See on objekti võime võtta mitmesuguseid vorme.
- Meetodi alistamine on superklassi meetodi ümberdefineerimine alamklassis.
- Dünaamiline polümorfism sisse Java on mehhanism, mille abil saab defineerida mitut meetodit sama nime ja allkirjaga ülemklassis ja alamklassis.
- Staatiline polümorfism sisse Java on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks kompileerimise ajal, samas kui dünaamiline polümorfism on polümorfismi tüüp, mis kogub teavet meetodi kutsumiseks käitusajal.
- Supermärksõna abil saab alamklassist pääseda juurde vanemklassi meetoditele.