Tipi di polimorfismo in Java [Polimorfismo statico e dinamico con esempi]

Pubblicato: 2021-06-18

Sommario

Che cos'è il polimorfismo in Java?

Uno dei concetti importanti nella programmazione orientata agli oggetti (OOP) è il polimorfismo, il che significa che una singola azione può essere eseguita in modi diversi. Deriva dalle parole greche: poly e morphs che significano molte e forme. Le diverse forme esistono quando sono correlate attraverso l'ereditarietà.

Come l'ereditarietà che eredita metodi e attributi da una classe diversa, il polimorfismo applica quei metodi ed esegue compiti diversi. Un oggetto è in grado di plasmarsi in varie forme attraverso il polimorfismo.

Cioè, un'entità può eseguire diverse operazioni in diversi scenari. Uno degli usi più comuni del polimorfismo nella programmazione orientata agli oggetti è quando viene utilizzato un riferimento di classe padre per fare riferimento a un oggetto di classe figlio. Ulteriori informazioni su vari concetti ed esempi di OOP.

Il polimorfismo in Java può essere ottenuto attraverso tre metodi:

Override del metodo: se una superclasse e una sottoclasse sono costituite dallo stesso metodo, l'override del metodo si riferisce al processo di sovrascrittura del metodo nella superclasse da parte del metodo nella sottoclasse. Di conseguenza, lo stesso metodo verrà utilizzato in condizioni diverse eseguendo operazioni diverse.

Output del programma:

Linguaggio di programmazione Java

Lingua inglese comune

  1. Overloading del metodo: L'overloading del metodo si riferisce al processo di creazione di metodi con lo stesso nome ma con parametri diversi. Gli esempi includono: void func() { … }, void func(int a) { … }, float func(double a) { … }, float func(int a, float b) { … }.

Produzione

**********

##########

  1. Sovraccarico dell'operatore: l'overloading dell'operatore è un concetto in Java in cui un operatore si comporta in modo diverso con operandi diversi. Esempi inclusi:
  • L'operatore “+” può essere utilizzato sia nell'addizione numerica che nella concatenazione di stringhe.
Addizione numerica Concatenazione di stringhe
int a = 5;

int b = 6;

somma int = a + b; // Uscita = 11

Stringa prima = “Pitone “;

Seconda stringa = “Programmazione”;

nome = primo + secondo; // Output = Programmazione Python

  • Gli operatori &,| e ! può essere utilizzato per l'overloading logico e bit per bit.

Tipi di polimorfismo in Java

La programmazione orientata agli oggetti si concentra su quattro concetti di base: astrazione, incapsulamento, ereditarietà e polimorfismo. Il polimorfismo è la capacità di elaborare oggetti in modo diverso sulla base della loro classe e dei tipi di dati.

Esistono due tipi di polimorfismo in Java : il polimorfismo del tempo di compilazione e il polimorfismo del tempo di esecuzione in Java . Questo polimorfismo java viene anche chiamato polimorfismi statici e polimorfismi dinamici.

1. Polimorfismo statico (o polimorfismo in fase di compilazione)

Come la maggior parte degli altri linguaggi di programmazione OOP, il polimorfismo Java consente l'incorporazione di più metodi all'interno di una classe. I metodi utilizzano lo stesso nome ma il parametro varia. Questo rappresenta il polimorfismo statico. Questo polimorfismo viene risolto durante il tempo del compilatore e viene ottenuto tramite l'overloading del metodo. Sono forniti tre criteri in cui i set di parametri devono differire:

  • Il numero dei parametri dovrebbe variare.
  • I tipi di parametro dovrebbero essere diversi.
  • Ordine diverso dei parametri. Ad esempio, se un metodo accetta una stringa e una lunga, mentre l'altro metodo accetta una lunga e una stringa. Tuttavia, questo tipo di ordine rende difficile la comprensione per l'API.

A causa della differenza nei parametri, ogni metodo ha una firma diversa. Il compilatore Java ha un'idea di quale metodo viene chiamato.

Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Esempio di polimorfismo statico

Uno dei modi in cui Java supporta il polimorfismo statico è l'overloading del metodo. Di seguito è riportato un esempio che mostra il caso di sovraccarico del metodo nel polimorfismo statico:

Esempio:

classe SimpleCalculator

{

int add(int a, int b)

{

ritorno a+b;

}

int add(int a, int b, int c)

{

restituire a+b+c;

}

}

Demo di classe pubblica

{

public static void main(String args[])

{

SimpleCalculator obj = new SimpleCalculator();

System.out.println(obj.add(25, 25));

System.out.println(obj.add(25, 25, 30));

}

}

Uscita del programma

50

80

2. Polimorfismo dinamico (o polimorfismo runtime in Java)

In questa forma di polimorfismo in java , il compilatore non determina il metodo da eseguire. È la Java Virtual Machine (JVM) che esegue il processo in fase di esecuzione. Il polimorfismo dinamico si riferisce al processo in cui una chiamata a un processo sottoposto a override viene risolta in fase di esecuzione. La variabile di riferimento di una superclasse chiama il metodo sottoposto a override. I metodi implementati sia dalla sottoclasse che dalla superclasse forniscono funzionalità diverse pur condividendo lo stesso nome.

Comprendere il processo di Upcasting è fondamentale prima di comprendere il concetto di polimorfismo di runtime. L'upcasting si riferisce al processo in cui a un oggetto della classe figlia viene fatto riferimento da una variabile di riferimento della superclasse. Ulteriori informazioni sul polimorfismo in PHP.

Esempio di polimorfismo dinamico (o tempo di esecuzione)

Esempio 1:

Vengono create due classi Bike e Splendor e la classe Splendor estende la classe Bike sovrascrivendo il suo metodo run(). Il metodo run() viene chiamato dalla variabile di riferimento della classe genitore. Poiché il metodo della sottoclasse sta sovrascrivendo il metodo della classe genitore; il metodo della sottoclasse viene invocato in fase di esecuzione.

Il programma

classe Bici{

void run(){System.out.println("in esecuzione");}

}

class Splendor estende Bike{

void run(){System.out.println("camminare in sicurezza con 30 km");}

pubblico statico void main(String args[]){

Bike b = new Splendor();//upcasting

b.run();

}

}

Uscita: camminare in sicurezza con 60km

Esempio 2

Vengono create due classi con i nomi "ABC" e "XYZ" dove XYZ è una classe figlia e ABC è una classe padre. Qui, il metodo myMethod() della classe genitore viene sovrascritto dalla classe figlia. L'oggetto di classe figlio viene assegnato al riferimento di classe padre.

Programma:

classe ABC{

public void myMethod(){

System.out.println(“Metodo sovrascritto”);

}

}

la classe pubblica XYZ estende ABC{

public void myMethod(){

System.out.println(“Metodo di sovrascrittura”);

}

public static void main(String args[]){

ABC obj = nuovo XYZ();

obj.myMethod();

}

}

Produzione

Metodo di sovrascrittura

Conclusione

Il concetto di polimorfismo in Java è una delle funzionalità più utili nella programmazione orientata agli oggetti. Inoltre, la capacità di invocare un metodo sia in fase statica che in fase di esecuzione ne amplia l'applicabilità.

L'idea alla base del concetto di polimorfismo è la flessibilità. Inoltre, la capacità di elaborare un gran numero di oggetti in un'unica variabile di riferimento, rende la codifica un po' più semplice. Pertanto, il concetto dovrebbe essere utilizzato nelle attività di codifica quotidiane e abbracciarne l'efficacia.

Se vuoi saperne di più sulla tecnologia del software, sul suo sviluppo e sul meccanismo alla base, puoi controllare il corso Executive PG Program in Software Development – ​​Specialization in Full Stack Development offerto da upGrad. Il corso di specializzazione è un programma online di 23 settimane che offre oltre 300 casi di studio per aumentare le tue conoscenze e gli strumenti disponibili e il linguaggio di programmazione per migliorare le tue abilità pratiche. Se hai altre domande relative al corso, inviaci un messaggio. Il nostro team ti contatterà.

Pianifica ora la tua carriera nello sviluppo di software.

Richiedi il programma Executive PG in Software Development da IIIT-B