logo

Polimorfismul în Java

Cuvântul polimorfism înseamnă a avea mai multe forme. Cu cuvinte simple, putem defini polimorfismul Java ca fiind capacitatea unui mesaj de a fi afișat în mai multe forme. În acest articol, vom afla ce este polimorfismul și tipul acestuia.

java listnode

Ilustrație reală a polimorfismului în Java : O persoană în același timp poate avea caracteristici diferite. Ca un bărbat, este în același timp un tată, un soț și un angajat. Deci aceeași persoană are comportamente diferite în situații diferite. Acest lucru se numește polimorfism.

Ce este polimorfismul în Java?

Polimorfismul este considerat una dintre caracteristicile importante ale programării orientate pe obiecte. Polimorfismul ne permite să efectuăm o singură acțiune în moduri diferite. Cu alte cuvinte, polimorfismul vă permite să definiți o interfață și să aveți mai multe implementări. Cuvântul poli înseamnă multe și morphs înseamnă forme, deci înseamnă multe forme.



Tipuri de polimorfism Java

În Java, polimorfismul este împărțit în principal în două tipuri:

  • Polimorfism în timp de compilare
  • Polimorfismul de rulare

Polimorfism în timp de compilare în Java

Este cunoscut și sub numele de polimorfism static. Acest tip de polimorfism se realizează prin supraîncărcare de funcții sau supraîncărcare a operatorului.

Notă: Dar Java nu acceptă supraîncărcarea operatorului.

Polimorfismul Java

Supraîncărcarea metodei

Când există mai multe funcții cu același nume, dar cu parametri diferiți, atunci se spune că aceste funcții sunt supraîncărcat . Funcțiile pot fi supraîncărcate de modificări ale numărului de argumente sau/și de o schimbare a tipului de argumente.

Exemplul 1:

Java




// Java Program for Method overloading> // By using Different Types of Arguments> // Class 1> // Helper class> class> Helper {> >// Method with 2 integer parameters> >static> int> Multiply(>int> a,>int> b)> >{> >// Returns product of integer numbers> >return> a * b;> >}> >// Method 2> >// With same name but with 2 double parameters> >static> double> Multiply(>double> a,>double> b)> >{> >// Returns product of double numbers> >return> a * b;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Calling method by passing> >// input as in arguments> >System.out.println(Helper.Multiply(>2>,>4>));> >System.out.println(Helper.Multiply(>5.5>,>6.3>));> >}> }>

>

șir de matrice java
>

Ieșire

8 34.65>

Exemplul 2:

Java




// Java program for Method Overloading> // by Using Different Numbers of Arguments> // Class 1> // Helper class> class> Helper {> >// Method 1> >// Multiplication of 2 numbers> >static> int> Multiply(>int> a,>int> b)> >{> >// Return product> >return> a * b;> >}> >// Method 2> >// // Multiplication of 3 numbers> >static> int> Multiply(>int> a,>int> b,>int> c)> >{> >// Return product> >return> a * b * c;> >}> }> // Class 2> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Calling method by passing> >// input as in arguments> >System.out.println(Helper.Multiply(>2>,>4>));> >System.out.println(Helper.Multiply(>2>,>7>,>3>));> >}> }>

>

>

Ieșire

8 42>

Subtipuri de polimorfism în timp de compilare

1. Supraîncărcare funcție

Este o caracteristică în C++ unde mai multe funcții pot avea același nume, dar cu liste de parametri diferite. Compilatorul va decide ce funcție să apeleze în funcție de numărul și tipurile de argumente transmise funcției.

2. Supraîncărcarea operatorului

Este o caracteristică în C++ în care operatorilor precum +, -, *, etc. pot primi semnificații suplimentare atunci când sunt aplicați la tipuri de date definite de utilizator.

3. Șablon

este o caracteristică puternică în C++ care ne permite să scriem funcții și clase generice. Un șablon este un plan pentru crearea unei familii de funcții sau clase.

Polimorfismul runtime în Java

Este, de asemenea, cunoscut sub numele de Dynamic Method Dispatch. Este un proces în care un apel de funcție la metoda suprascrisă este rezolvat la Runtime. Acest tip de polimorfism este realizat prin Overriding Method. Depășirea metodei , pe de altă parte, apare atunci când o clasă derivată are o definiție pentru una dintre funcțiile membre ale clasei de bază. Se spune că acea funcție de bază este depășit .

Exemplu

Java




// Java Program for Method Overriding> // Class 1> // Helper class> class> Parent {> >// Method of parent class> >void> Print()> >{> >// Print statement> >System.out.println(>'parent class'>);> >}> }> // Class 2> // Helper class> class> subclass1>extends> Parent {> >// Method> >void> Print() { System.out.println(>'subclass1'>); }> }> // Class 3> // Helper class> class> subclass2>extends> Parent {> >// Method> >void> Print()> >{> >// Print statement> >System.out.println(>'subclass2'>);> >}> }> // Class 4> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating object of class 1> >Parent a;> >// Now we will be calling print methods> >// inside main() method> >a =>new> subclass1();> >a.Print();> >a =>new> subclass2();> >a.Print();> >}> }>

>

legi de echivalență
>

Ieșire

subclass1 subclass2>

Explicația codului de mai sus:

Aici, în acest program, atunci când un obiect al unei clase copil este creat, atunci metoda din interiorul clasei copil este apelată. Acest lucru se datorează faptului că metoda din clasa părinte este suprascrisă de clasa copil. Deoarece metoda este suprascrisă, această metodă are mai multă prioritate decât metoda părinte în interiorul clasei copil. Deci, corpul din interiorul clasei copil este executat.

Subtip de polimorfism în timp de rulare

i. Funcții virtuale

Permite unui obiect dintr-o clasă derivată să se comporte ca și cum ar fi un obiect al clasei de bază. Clasa derivată poate suprascrie funcția virtuală a clasei de bază pentru a oferi propria sa implementare. Apelul funcției este rezolvat în timpul execuției, în funcție de tipul real al obiectului.

Diagrama -

Tipuri de polimorfism în Java

Polimorfismul în Java este un concept care permite ca obiectele din clase diferite să fie tratate ca obiecte ale unei clase comune. Permite obiectelor să se comporte diferit în funcție de tipul lor specific de clasă.

Avantajele polimorfismului în Java

  1. Mărește reutilizarea codului, permițând ca obiectele din clase diferite să fie tratate ca obiecte ale unei clase comune.
  2. Îmbunătățește lizibilitatea și mentenabilitatea codului prin reducerea cantității de cod care trebuie scris și întreținut.
  3. Acceptă legarea dinamică, permițând apelarea metodei corecte în timpul execuției, pe baza clasei actuale a obiectului.
  4. Permite ca obiectele să fie tratate ca un singur tip, facilitând scrierea de cod generic care poate gestiona obiecte de diferite tipuri.

Dezavantajele polimorfismului în Java

  1. Poate face mai dificilă înțelegerea comportamentului unui obiect, mai ales dacă codul este complex.
  2. Acest lucru poate duce la probleme de performanță, deoarece comportamentul polimorf poate necesita calcule suplimentare în timpul execuției.