logo

Polimorfisme a Java

La paraula polimorfisme significa tenir moltes formes. En paraules senzilles, podem definir el polimorfisme de Java com la capacitat que té un missatge de mostrar-se en més d'una forma. En aquest article, aprendrem què és el polimorfisme i el seu tipus.

Il·lustració de la vida real del polimorfisme a Java : Una persona al mateix temps pot tenir diferents característiques. Com un home al mateix temps és un pare, un marit i un empleat. Així, una mateixa persona té diferents comportaments en diferents situacions. Això s'anomena polimorfisme.



Què és el polimorfisme a Java?

El polimorfisme es considera una de les característiques importants de la programació orientada a objectes. El polimorfisme ens permet realitzar una única acció de diferents maneres. En altres paraules, el polimorfisme us permet definir una interfície i tenir múltiples implementacions. La paraula poli significa moltes i morphs significa formes, per tant significa moltes formes.

Tipus de polimorfisme de Java

A Java, el polimorfisme es divideix principalment en dos tipus:

  • Polimorfisme en temps de compilació
  • Polimorfisme en temps d'execució

Polimorfisme en temps de compilació a Java

També es coneix com a polimorfisme estàtic. Aquest tipus de polimorfisme s'aconsegueix per sobrecàrrega de funcions o sobrecàrrega d'operadors.



Nota: Però Java no admet la sobrecàrrega de l'operador.

Polimorfisme de Java

Sobrecàrrega del mètode

Quan hi ha diverses funcions amb el mateix nom però amb diferents paràmetres, es diu que aquestes funcions són sobrecarregat . Les funcions es poden sobrecarregar per canvis en el nombre d'arguments o/i un canvi en el tipus d'arguments.



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

>

com executar l'script a linux
>

Sortida

8 34.65>

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

>

>

Sortida

8 42>

Subtipus de polimorfisme en temps de compilació

1. Sobrecàrrega de funcions

És una característica en C++ on diverses funcions poden tenir el mateix nom però amb diferents llistes de paràmetres. El compilador decidirà quina funció cridar en funció del nombre i tipus d'arguments passats a la funció.

2. Sobrecàrrega de l'operador

És una característica de C++ on els operadors com +, -, *, etc. poden rebre significats addicionals quan s'apliquen a tipus de dades definits per l'usuari.

3. Plantilla

és una característica potent en C++ que ens permet escriure funcions i classes genèriques. Una plantilla és un pla per crear una família de funcions o classes.

Polimorfisme en temps d'execució a Java

També es coneix com a enviament de mètodes dinàmics. És un procés en el qual es resol una trucada de funció al mètode anul·lat en temps d'execució. Aquest tipus de polimorfisme s'aconsegueix mitjançant Method Overriding. Anul·lació del mètode , en canvi, es produeix quan una classe derivada té una definició per a una de les funcions membres de la classe base. Es diu que aquesta funció base és anul·lat .

Exemple

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

>

java parseint
>

Sortida

subclass1 subclass2>

Explicació del codi anterior:

Aquí, en aquest programa, quan es crea un objecte d'una classe secundària, s'anomena el mètode dins de la classe secundària. Això es deu al fet que el mètode de la classe pare està anul·lat per la classe secundària. Com que el mètode està anul·lat, aquest mètode té més prioritat que el mètode pare dins de la classe secundària. Per tant, s'executa el cos dins de la classe fill.

Subtipus de polimorfisme en temps d'execució

i. Funcions virtuals

Permet que un objecte d'una classe derivada es comporti com si fos un objecte de la classe base. La classe derivada pot substituir la funció virtual de la classe base per proporcionar la seva pròpia implementació. La crida a la funció es resol en temps d'execució, depenent del tipus real de l'objecte.

Diagrama -

Tipus de polimorfisme a Java

El polimorfisme a Java és un concepte que permet tractar objectes de diferents classes com a objectes d'una classe comuna. Permet que els objectes es comportin de manera diferent segons el seu tipus de classe específic.

Avantatges del polimorfisme a Java

  1. Augmenta la reutilització del codi permetent que els objectes de diferents classes siguin tractats com a objectes d'una classe comuna.
  2. Millora la llegibilitat i el manteniment del codi reduint la quantitat de codi que cal escriure i mantenir.
  3. Admet l'enllaç dinàmic, que permet cridar el mètode correcte en temps d'execució, en funció de la classe real de l'objecte.
  4. Permet tractar els objectes com un sol tipus, facilitant l'escriptura de codi genèric que pugui gestionar objectes de diferents tipus.

Inconvenients del polimorfisme a Java

  1. Pot dificultar la comprensió del comportament d'un objecte, especialment si el codi és complex.
  2. Això pot provocar problemes de rendiment, ja que el comportament polimòrfic pot requerir càlculs addicionals en temps d'execució.