Polimorfismul în Java (static și dinamic)

În ce este polimorfismul Java?

polimorfismul in Java apare atunci când există una sau mai multe clase sau obiecte legate între ele prin moștenire. 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 a efectua diferite sarcini. Deci, scopul este comunicarea, dar abordarea este diferită.

De exemplu, ai 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, un e-mail etc. Deci, scopul este comun și anume comunicarea, dar abordarea lor este diferită. Aceasta se numește Polimorfism. Acum, vom învăța Polimorfismul în Java cu exemplu.

Clic aici dacă videoclipul nu este accesibil

Java Polimorfism în POO cu Exemplu

Avem o singură clasă părinte, „Cont” cu funcție de depunere și retragere. Contul are 2 clase de copii. Operațiunea de depunere și retragere este aceeași pentru conturile de economii și conturile curente. Deci, metodele moștenite din clasa Account vor funcționa.

Moștenire unică în Java
Java Exemplu de polimorfism

Modificare a cerințelor software

Există o schimbare în specificația cerințelor, ceva atât de comun în industria software. Ar trebui să adăugați funcționalitate Cont bancar privilegiat cu Facilitatea de descoperire de cont. Pentru un fundal, descoperirea de cont este o facilitate prin care poți retrage o sumă mai mare decât soldul disponibil în contul tău. Așadar, retrageți metoda pentru nevoile privilegiate, implementată din nou. Dar nu modificați fragmentul de cod testat în contul de economii și verificare. Acesta este avantajul OOPS

Java polimorfismul

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

Java polimorfismul

Pas 2) Dar când metoda „Retragere” pentru contul privilegiat (facilitatea de descoperire de cont) este numită metoda de retragere definită în clasa privilegiată este executată. Aceasta este Polimorfismul în POO.

Java polimorfismul

Anularea metodei în Java

Suprascrierea metodei înseamnă redefinirea unei metode super-clase într-o subclasă.

Reguli pentru înlocuirea metodei

  • Semnătura metodei, adică numele metodei, lista de parametri ș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.

Reguli pentru înlocuirea metodei în Java

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 executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

Diferența dintre supraîncărcare și suprascriere

Metoda de supraîncărcare
Suprascrierea metodei
Supraîncărcarea metodei este în aceeași clasă, unde mai multe metode au același nume, dar semnături diferite. Suprascrierea metodei este atunci când una dintre metodele din super clasă 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 în POO 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ă sunt rezolvate î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 a clasei părinte, dar obiectul către care indică este din clasa copil (după cum se arată în exemplul de diagramă de mai jos a Polimorfismului).

obj.treatPatient() va executa metoda treatPatient() din subclasa – Chirurg

Dacă o referință de clasă de bază este utilizată pentru a apela o metodă, metoda care trebuie invocată este decisă de JVM, în funcție de obiectul către care indică referința.

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

Acest lucru este decis în timpul rulării și, prin urmare, denumit dinamic or polimorfism în timp de rulare

Diferența dintre polimorfismul static și dinamic

Polimorfismul static în Java este un tip de polimorfism care colectează informațiile pentru apelarea unei metode în timpul compilării, în timp ce polimorfismul dinamic este un tip de polimorfism care colectează informațiile pentru apelarea unei metode în timpul execuției.

Polimorfismul static
Polimorfismul dinamic
Se referă la supraîncărcarea metodei. Se referă la suprascrierea metodei.
Erorile, dacă există, sunt rezolvate în timpul compilării. 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, spre care indică variabila de referință. Acesta poate fi determinat doar în timpul execuției când codul este în curs de execuție, de unde și numele dinamic.

ex:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Super cuvânt cheie în Java

Ce se întâmplă dacă metoda treatPatient din clasa Surgeon dorește să execute funcționalitatea definită în clasa Doctor și apoi să 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 ar putea fi scrisă astfel:

treatPatient(){
   super.treatPatient();
     //add code specific to Surgeon
}

Cuvântul cheie super poate fi folosit pentru a accesa orice membru de date sau metode ale superclasei din subclasa.

În continuare, vom afla despre Super cuvânt cheie, Moştenire și Polimorfismul în Java cu programe de exemplu.

Exemplu:-Pentru a învăța Moștenirea, Polimorfismul și super-cheie

Pas 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 Y
         public void m1(){
            // overriden method
            System.out.println("This is method m1 of class Y");
        }
       public void m2(){
           super.m1();
           System.out.println("This is method m2 of class Y");
      }
}

Pas 2) Salvați, compilați și rulați codul. Observați rezultatul.

Pas 3) Anulați comentariile rândurile # 6-9. Salvați, compilați și rulați codul. Observați rezultatul.

Pas 4) Decomentează rândul # 10 . Salvați și compilați codul.

Pas 5) Eroare = ? Acest lucru se datorează faptului că subclasa nu poate accesa membrii privați ai superclasei.

Rezumat

  • Polimorfismul în programarea orientată pe obiecte apare atunci când există una sau mai multe clase sau obiecte legate între ele prin moștenire. Este capacitatea unui obiect de a lua mai multe forme.
  • Suprascrierea metodei înseamnă redefinirea unei metode super-clase într-o subclasă.
  • Polimorfismul dinamic în Java este mecanismul prin care mai multe metode pot fi definite cu același nume și semnătură în superclasă și subclasă.
  • Polimorfismul static în Java este un tip de polimorfism care colectează informațiile pentru apelarea unei metode în timpul compilării, în timp ce polimorfismul dinamic este un tip de polimorfism care colectează informațiile pentru apelarea unei metode în timpul execuției.
  • Super cuvântul cheie poate fi folosit pentru a accesa metodele clasei părinte din clasa fii.