Mis on Java polümorfism?
Java polümorfism tekib siis, kui pärimise teel on omavahel seotud üks või mitu klassi või objekti. Teisisõnu, see on objekti võime võtta palju vorme. Pärand võimaldab kasutajatel pärida atribuudid ja meetodid ning polümorfism kasutab neid meetodeid erinevate ülesannete täitmiseks. Niisiis, eesmärk on suhtlus, kuid lähenemine on erinev.
Näiteks on teil suhtlemiseks nutitelefon. Teie valitud suhtlusrežiim võib olla mis tahes. See võib olla kõne, tekstsõnum, piltsõnum, post jne. Nii et eesmärk on ühine, see on suhtlus, kuid nende lähenemine on erinev. Seda nimetatakse polümorfismiks.
Selles õpetuses saate teada
- Mis on polümorfism?
- Java polümorfism OOP-des koos näitega
- Meetodi ülimuslikkus
- Erinevus ülekoormuse ja ületamise vahel
- Mis on dünaamiline polümorfism?
- Super märksõna
- Staatilise ja dünaamilise polümorfismi erinevus
Kui videole pole juurdepääsu, klõpsake siin
Java polümorfism OOP-des koos näitega
Meil on üks vanemaklass „Konto“, mille funktsioon on sissemakse ja väljamakse. Kontol on 2 alamklassi . Sissemakse ja väljamakse toimib sama ka kontode salvestamisel ja kontrollimisel. Nii et konto klassist päritud meetodid töötavad.Tarkvaranõude muutus
Nõuete spetsifikatsioonis on toimunud muudatus, mis on tarkvaratööstuses nii tavaline. Peate arvelduskrediidiga lisama funktsionaalsusega privilegeeritud pangakonto.
Taustaks on arvelduskrediit vahend, mille abil saate oma kontol olevast jäägist suurema summa välja võtta.
Niisiis, eemaldage meetod privilegeeritud vajaduste jaoks uuesti rakendamiseks. Kuid te ei muuda testitud koodijuppi hoiukontol. See on OOPS-i eelis
Samm 1) Nii, et kui konto "säästetud" meetodit nimetatakse "vanemkonto klassist", käivitatakse.
Samm 2) Kui aga kutsutakse privilegeeritud konto (arvelduskrediidi) meetodit "Tagasivõtmine", rakendatakse privilegeeritud klassis määratletud tagasivõtmismeetodit. See on polümorfism.
Meetodi ülimuslikkus
Meetodi ülimuslikkus on superklassi meetodi määratlemine alamklassis.
Meetodi alistamise reeglid
- Meetodi allkiri, st meetodi nimi, parameetrite loend ja tagastuse tüüp peavad täpselt vastama.
- Alistatav meetod võib küll ligipääsetavust laiendada, kuid mitte kitsendada, st kui see on põhiklassis privaatne, saab lasteklass selle avalikustada, 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 executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}
Erinevus ülekoormuse ja ületamise vahel
Meetod Ülekoormus | Meetodi ülimuslikkus |
---|---|
Meetodi ülekoormus kuulub samasse klassi, kus mitmel meetodil on sama nimi, kuid erinevad allkirjad. |
Meetodi ülekaal on see, kui üks superklassi meetoditest määratletakse alamklassis uuesti. Sel juhul jääb meetodi allkiri samaks. |
Nt: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Nt: 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?
Dünaamiline polümorfism on mehhanism, mille abil saab superklassis ja alaklassis sama nime ja allkirjaga määratleda mitu meetodit. Kõne alistatud meetodile lahendatakse käitamise ajal.
Dünaamilise polümorfismi näide:
Superklassi võrdlusmuutuja võib viidata alamklassi objektile
Doctor obj = new Surgeon();
Mõtle avaldusele
obj.treatPatient();
Siin on võrdlusmuutuja "obj" vanema klassi, kuid objekt, millele see osutab, on lapseklass (nagu on näidatud diagrammil).
obj.treatPatient () käivitab alamklassi - chirurg kirurgipatient () meetodi
Kui meetodi kutsumiseks kasutatakse baasklassi viidet, otsustab kasutatava meetodi JVM, sõltuvalt objektist, millele viide osutab
Näiteks, kuigi obj on viide arstile, kutsub see kirurgi meetodit, kuna see osutab kirurgi objektile
See otsustatakse tööaja jooksul ja seetõttu nimetatakse seda dünaamiliseks või tööaja polümorfismiks
Super märksõna
Mis siis, kui kirurgiarsti meetod raviPatient soovib käivitada doktoriklassis määratletud funktsionaalsuse ja seejärel oma spetsiifilise funktsionaalsuse?
Sel juhul märksõna
super
saab kasutada vanemaklassi meetodite juurde pääsemiseks lasteklassist.Kirurgiklassi meetodi TreatPatient võiks kirjutada järgmiselt:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
The keyword super can be used to access any data member or methods of the super class in the sub class.
Example:-To learn Inheritance, Polymorphism & super keyword
Step 1) Copy the following code into an 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");}}
Step 2) Save, Compile & Run the code. Observe the output.
Step 3) Uncomments lines # 6-9. Save, Compile & Run the code. Observe the output.
Step 4) Uncomment line # 10 . Save & Compile the code.
Step 5) Error = ? This is because sub-class cannot access private members of the super class.
Difference between Static & Dynamic Polymorphism
Static Polymorphism | Dynamic Polymorphism |
---|---|
It relates to method overloading. | It relates to method overriding. |
Vead, kui neid on, lahendatakse kompileerimise ajal. Kuna kompileerimise ajal koodi ei käivitata, on nimi staatiline. Nt: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
Juhul kui võrdlusmuutuja kutsub alistatavat meetodit, määrab kutsutava meetodi objekt, teie viitemuutuja osutab. Seda saab määrata ainult käitamise ajal, kui kood on käivitamisel, seega nimi on dünaamiline. Nt: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |