Polimorfism în Java OOP-uri cu Exemplu

Cuprins:

Anonim

Ce este polimorfismul în Java?

Polimorfismul în Java apare atunci când există una sau mai multe clase sau obiecte legate între ele prin moștenire. Cu alte cuvinte, este capacitatea unui obiect de a lua mai multe forme. Moștenirea permite utilizatorilor să moștenească atribute și metode, iar polimorfismul folosește aceste metode pentru îndeplinirea diferitelor sarcini. Deci, scopul este comunicarea, dar abordarea este diferită.

De exemplu, aveți un smartphone pentru comunicare. Modul de comunicare pe care îl alegeți ar putea fi orice. Poate fi un apel, un mesaj text, un mesaj ilustrat, poștă etc. Deci, obiectivul este comun, adică comunicarea, dar abordarea lor este diferită. Aceasta se numește polimorfism.

În acest tutorial, veți învăța-

  • Ce este polimorfismul?
  • Polimorfismul Java în OOP cu Exemplu
  • Anularea metodei
  • Diferența dintre suprasolicitare și suprascriere
  • Ce este polimorfismul dinamic?
  • Super cuvânt cheie
  • Diferența dintre polimorfismul static și dinamic

Faceți clic aici dacă videoclipul nu este accesibil

Polimorfismul Java în OOP cu Exemplu

Avem o clasă mamă, „Cont” cu funcția de depunere și retragere. Contul are 2 clase secundare . Operațiunea de depunere și retragere este aceeași pentru conturile de economisire și verificare. Deci, metodele moștenite din clasa Cont vor funcționa.

Modificarea cerinței software

Există o modificare a specificației cerințelor, ceva care este atât de comun în industria software-ului. Ar trebui să adăugați un cont bancar cu funcționalitate privilegiat cu facilitatea de descoperit de cont.

Pentru un fundal, descoperitul de cont este o facilitate prin care puteți retrage o sumă mai mare decât soldul disponibil în contul dvs.

Deci, retrageți metoda pentru nevoi privilegiate pentru a fi implementată din nou. Dar nu modificați codul testat în contul de economii și verificare. Acesta este avantajul OOPS

Pasul 1) Astfel încât atunci când metoda „retrasă” pentru economisirea contului este numită o metodă din clasa de cont părinte este executată.

Pasul 2) Dar când se execută metoda „Retragere” pentru contul privilegiat (facilitatea de descoperire de cont), se execută metoda de retragere definită în clasa privilegiată. Acesta este polimorfismul.

Anularea metodei

Metoda suprascrierii este redefinirea unei metode de super-clasă într-o subclasă.

Reguli pentru suprascrierea metodei

  • Semnătura metodei, adică numele metodei, lista parametrilor și tipul de returnare trebuie să se potrivească exact.
  • Metoda suprascrisă poate lărgi accesibilitatea, dar nu o restrânge, adică dacă este privată în clasa de bază, clasa copil o poate face publică, dar nu invers.

Exemplu

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();}}

Diferența dintre suprasolicitare și suprascriere

Metoda de supraîncărcare Anularea metodei

Supraîncărcarea metodei se află în aceeași clasă, unde mai multe metode au același nume, dar semnături diferite.

Anularea metodei este atunci când una dintre metodele din clasa super este redefinită în subclasă. În acest caz, semnătura metodei rămâne aceeași.

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}}

Ce este polimorfismul dinamic?

Polimorfismul dinamic este mecanismul prin care mai multe metode pot fi definite cu același nume și semnătură în superclasă și subclasă. Apelul la o metodă suprascrisă este rezolvat în timpul rulării.

Exemplu de polimorfism dinamic:

O variabilă de referință a superclasei se poate referi la un obiect de subclasă

Doctor obj = new Surgeon();

Luați în considerare afirmația

obj.treatPatient();

Aici variabila de referință „obj” este din clasa părinte, dar obiectul către care este indicat este din clasa copil (așa cum se arată în diagramă).


obj.treatPatient () va executa metoda treatPatient () a subclasei - Chirurg

Dacă se folosește o referință de clasă de bază pentru a apela o metodă, metoda care trebuie invocată este decisă de JVM, în funcție de obiectul către care se referă

De exemplu, chiar dacă obj este o referință la Doctor, ea numește metoda Chirurgului, deoarece indică un obiect Chirurg

Acest lucru este decis în timpul rulării și, prin urmare, denumit polimorfism dinamic sau run-time

Super cuvânt cheie

Ce se întâmplă dacă metoda treatPatient din clasa Chirurg vrea să execute funcționalitatea definită în clasa Doctor și apoi să își realizeze propria funcționalitate specifică?
În acest caz, cuvânt cheie

superpoate fi folosit pentru a accesa metodele clasei părinte din clasa copil.
Metoda treatPatient din clasa Chirurg poate fi scrisă astfel:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Cuvântul cheie super poate fi utilizat pentru a accesa orice membru de date sau metode ale clasei super din subclasă.Exemplu: -Pentru a învăța moștenirea, polimorfismul și super cuvântul cheie

Pasul 1) Copiați următorul cod într-un 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");}}

Pasul 2) Salvați, compilați și rulați codul. Observați ieșirea.
Pasul 3) Liniile de comentarii # 6-9. Salvați, compilați și rulați codul. Observați ieșirea.
Pasul 4) Linia de comentariu nr. 10. Salvați și compilați codul.
Pasul 5) Eroare =? Acest lucru se datorează faptului că sub-clasa nu poate accesa membrii privați ai super clasei.

Diferența dintre polimorfismul static și dinamic

Polimorfism static Polimorfism dinamic
Se referă la supraîncărcarea metodei. Se referă la suprascrierea metodei.

Erorile, dacă există, sunt rezolvate la compilare. Deoarece codul nu este executat în timpul compilării, de unde și numele static.

Ex:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

În cazul în care o variabilă de referință apelează o metodă suprascrisă, metoda care trebuie invocată este determinată de obiect, variabila dvs. de referință indică. Acest lucru poate fi determinat numai la runtime când codul este în curs de execuție, de unde și numele dinamic.

Ex:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();