Što je polimorfizam u Javi?
Polimorfizam u Javi javlja se kada postoji jedna ili više klasa ili objekata koji su međusobno povezani nasljeđivanjem. Drugim riječima, to je sposobnost predmeta da poprimi različite oblike. Nasljeđivanje omogućuje korisnicima nasljeđivanje atributa i metoda, a polimorfizam ih koristi za obavljanje različitih zadataka. Dakle, cilj je komunikacija, ali pristup je drugačiji.
Na primjer, imate pametni telefon za komunikaciju. Način komunikacije koji odaberete može biti bilo što. To može biti poziv, tekstualna poruka, slikovna poruka, pošta itd. Dakle, zajednički je cilj komunikacija, ali njihov je pristup drugačiji. To se naziva polimorfizam.
U ovom vodiču naučit ćete-
- Što je polimorfizam?
- Java polimorfizam u OOP-ima s primjerom
- Nadjačavanje metode
- Razlika između preopterećenja i premošćivanja
- Što je dinamički polimorfizam?
- Super ključna riječ
- Razlika između statičkog i dinamičkog polimorfizma
Kliknite ovdje ako videozapis nije dostupan
Java polimorfizam u OOP-ima s primjerom
Imamo jedan roditeljski razred, 'Račun' s funkcijom polaganja i podizanja. Račun ima 2 podređene klase . Postupak polaganja i podizanja isti je za spremanje i provjeru računa. Tako će naslijeđene metode iz klase Account raditi.Promjena zahtjeva softvera
Postoji promjena u specifikaciji zahtjeva, nešto što je tako često u industriji softvera. Trebali biste dodati privilegirani bankovni račun s funkcijom prekoračenja.
Kao pozadinu, prekoračenje je mogućnost u kojoj možete podići iznos veći od raspoloživog stanja na vašem računu.
Dakle, metoda povlačenja za privilegirane potrebe treba se ponovno primijeniti. Ali testirani dio koda ne mijenjate na štednom i čekovnom računu. To je prednost OOPS-a
Korak 1) Takav da se izvrši metoda iz klase roditeljskog računa kada se zove metoda "povučenog" za spremanje računa.
Korak 2) Ali kada se zove metoda "Povuci" za privilegirani račun (prekoračenje) izvršava se metoda povlačenja definirana u privilegiranoj klasi. Ovo je polimorfizam.
Nadjačavanje metode
Nadjačavanje metode redefinira metodu super klase u podklasi.
Pravila za nadjačavanje metoda
- Potpis metode, tj. Naziv metode, popis parametara i vrsta povrata moraju se točno podudarati.
- Nadjačana metoda može proširiti dostupnost, ali je ne može suziti, tj. Ako je privatna u osnovnoj klasi, podređena klasa može je učiniti javnom, ali ne i obrnuto.
Primjer
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 između preopterećenja i premošćivanja
Preopterećenje metode | Nadjačavanje metode |
---|---|
Preopterećenje metode je u istoj klasi, gdje više od jedne metode ima isto ime, ali različite potpise. |
Nadjačavanje metode je kada se jedna od metoda u super klasi ponovno definira u podklasi. U ovom slučaju, potpis metode ostaje isti. |
Primjer: void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b); |
Primjer: class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}} |
Što je dinamički polimorfizam?
Dinamički polimorfizam je mehanizam kojim se više metoda može definirati istim imenom i potpisom u superrazredu i podrazredu. Poziv nadjačane metode rješava se u vrijeme izvođenja.
Primjer dinamičkog polimorfizma:
Referentna varijabla super klase može se odnositi na objekt podklase
Doctor obj = new Surgeon();
Razmotrite izjavu
obj.treatPatient();
Ovdje je referentna varijabla "obj" roditeljske klase, ali objekt na koji upućuje je podređene klase (kao što je prikazano na dijagramu).
obj.treatPatient () izvršit će metodu treatPatient () podklase - Kirurg
Ako se referenca osnovne klase koristi za pozivanje metode, metodu koja će se pozvati odlučuje JVM, ovisno o objektu na koji referenca upućuje
Na primjer, iako je obj referenca na doktora, on poziva metodu Kirurg, jer pokazuje na objekt Kirurg
To se odlučuje tijekom vremena izvođenja i stoga se naziva dinamičkim ili vremenom polimorfizma
Super ključna riječ
Što ako metoda treatPatient u klasi Surgeon želi izvršiti funkcionalnost definiranu u klasi Doctor i zatim izvesti vlastitu specifičnu funkcionalnost?
U ovom slučaju, ključna riječ
super
može se koristiti za pristup metodama nadređene klase iz podređene klase.Metoda TreatPatient u klasi Kirurg mogla bi se zapisati kao:
treatPatient(){super.treatPatient();//add code specific to Surgeon}
Ključna riječ super može se koristiti za pristup bilo kojem članu podataka ili metodama super klase u podklasi.Primjer: -Da naučite nasljeđivanje, polimorfizam i ključnu riječ super
Korak 1) Kopirajte sljedeći kod u uređivač
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");}}
Korak 2) Spremite, prevedite i pokrenite kôd. Promatrajte izlaz.
Korak 3) Komentira retke # 6-9. Spremite, prevedite i pokrenite kôd. Promatrajte izlaz.
Korak 4) Komentirajte redak # 10. Spremite i kompajlirajte kod.
Korak 5) Pogreška =? To je zato što podklasa ne može pristupiti privatnim članovima super klase.
Razlika između statičkog i dinamičkog polimorfizma
Statički polimorfizam | Dinamički polimorfizam |
---|---|
Odnosi se na preopterećenje metode. | Odnosi se na nadjačavanje metode. |
Pogreške, ako ih ima, rješavaju se u vrijeme sastavljanja. Budući da se kod ne izvršava tijekom kompilacije, otuda i naziv static. Primjer: void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error. |
U slučaju da referentna varijabla poziva nadjačanu metodu, metodu koju treba pozvati određuje objekt na koji upućuje vaša referentna varijabla. To se može utvrditi samo u vrijeme izvođenja kada je kod u izvršenju, pa otuda i naziv dynamic. Primjer: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |