Polimorfizam u Java OOP-ima s primjerom

Sadržaj:

Anonim

Š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č

supermož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();