Kaj je polimorfizem v Javi?
Polimorfizem v Javi se pojavi, kadar obstaja en ali več razredov ali predmetov, ki so med seboj povezani z dedovanjem. Z drugimi besedami, to je sposobnost predmeta, da ima različne oblike. Dedovanje uporabnikom omogoča dedovanje atributov in metod, polimorfizem pa te metode uporablja za izvajanje različnih nalog. Cilj je torej komunikacija, a pristop je drugačen.
Na primer, imate pametni telefon za komunikacijo. Način komunikacije, ki ga izberete, je lahko karkoli. To je lahko klic, besedilno sporočilo, slikovno sporočilo, pošta itd. Cilj je torej skupna komunikacija, vendar je njihov pristop drugačen. To se imenuje polimorfizem.
V tej vadnici boste izvedeli-
- Kaj je polimorfizem?
- Java polimorfizem v OOP-jih s primerom
- Preglasitev metode
- Razlika med preobremenitvijo in preglasitvijo
- Kaj je dinamični polimorfizem?
- Super ključna beseda
- Razlika med statičnim in dinamičnim polimorfizmom
Kliknite tukaj, če video ni dostopen
Java polimorfizem v OOP-jih s primerom
Imamo en nadrejeni razred, 'Račun' s funkcijo pologa in dviga. Račun ima 2 podrejeni razred Delo s pologom in dvigom je enako za shranjevanje in preverjanje računov. Tako bodo podedovane metode iz razreda Account delovale.Sprememba zahteve glede programske opreme
Spremeni se specifikacija zahtev, kar je tako pogosto v industriji programske opreme. Dodali bi morali privilegiran bančni račun s funkcijo prekoračitve.
Za preteklost je prekoračitev sredstva, kjer lahko dvignete znesek, večji od razpoložljivega stanja na vašem računu.
Torej, umaknite metodo za privilegirane potrebe, ki jo je treba ponovno uporabiti. Preizkušenega dela kode pa ne spremenite v Varčevalni in čekovni račun. To je prednost OOPS
Korak 1) Takšen, da se pri klicanju metode "umaknjeni" za shranjevanje računa izvede metoda iz razreda nadrejenega računa.
Korak 2) Ko pa se pokliče metoda "Umik" za privilegirani račun (prekoračitev), se izvede metoda umika, definirana v privilegiranem razredu. To je polimorfizem.
Preglasitev metode
Preglasitev metode je redefiniranje metode super razreda v podrazredu.
Pravila za preglasitev metode
- Podpis metode, tj. Ime metode, seznam parametrov in vrsta vrnitve, se morajo natančno ujemati.
- Preglašena metoda lahko dostopnost razširi, ne pa tudi zoži, tj. Če je v osnovnem razredu zasebna, jo lahko podrejeni razred objavi kot javno, ne pa tudi obratno.
Primer
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();}}
Razlika med preobremenitvijo in preglasitvijo
Preobremenitev metode | Preglasitev metode |
---|---|
Preobremenitev metode je v istem razredu, kjer ima več metod isto ime, vendar različne podpise. |
Preglasitev metode je, ko je ena od metod v superrazredu na novo definirana v podrazredu. V tem primeru podpis metode ostane enak. |
Primer: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Primer: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Kaj je dinamični polimorfizem?
Dinamični polimorfizem je mehanizem, s katerim je mogoče v superrazredu in podrazredu definirati več metod z istim imenom in podpisom. Klic razveljavljene metode se reši med izvajanjem.
Primer dinamičnega polimorfizma:
Referenčna spremenljivka super razreda se lahko nanaša na objekt podrazreda
Doctor obj = new Surgeon();
Razmislite o izjavi
obj.treatPatient();
Tu je referenčna spremenljivka "obj" nadrejenega razreda, predmet, na katerega kaže, pa je podrejenega razreda (kot je prikazano na diagramu).
obj.treatPatient () bo izvedel metodo treatPatient () podrazreda - Kirurg
Če se za klicanje metode uporabi referenca osnovnega razreda, se za metodo, ki jo je treba priklicati, odloči JVM, odvisno od predmeta, na katerega kaže referenca
Na primer, čeprav je obj sklic na zdravnika, pokliče metodo Surgeon, saj kaže na objekt Surgeon
To se odloči med izvajanjem in ga tako imenujemo dinamični ali polimorfizem med izvajanjem
Super ključna beseda
Kaj pa, če metoda treatPatient v razredu Surgeon želi izvršiti funkcionalnost, definirano v razredu Doctor, in nato izvesti lastno specifično funkcionalnost?
V tem primeru ključna beseda
super
se lahko uporablja za dostop do metod nadrejenega razreda iz podrejenega razreda.Metodo treatPatient v razredu kirurg bi lahko zapisali kot:
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. |
Morebitne napake so odpravljene v času prevajanja. Ker se koda med prevajanjem ne izvrši, od tod tudi ime static. Primer: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
V primeru, da referenčna spremenljivka pokliče razveljavljeno metodo, metodo, ki jo je treba priklicati, določi objekt, na katerega kaže vaša referenčna spremenljivka. To je mogoče določiti le med izvajanjem, ko je koda v premajhnem izvajanju, od tod tudi ime dynamic. Primer: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |