Il polimorfismo in Java è un concetto con cui possiamo eseguire una singola azione in modi diversi. Il polimorfismo deriva da 2 parole greche: poly e morphs. La parola “poly” significa molti e “morphs” significa forme. Quindi polimorfismo significa molte forme.
Ci sono due tipi di polimorfismo in Java: polimorfismo compile-time e polimorfismo runtime. Possiamo eseguire il polimorfismo in Java tramite l’overloading del metodo e l’overriding del metodo.
Se si sovraccarica un metodo statico in Java, è un esempio di polimorfismo a tempo di compilazione. Qui ci concentreremo sul polimorfismo runtime in Java.
Polimorfismo runtime in Java
Il polimorfismo runtime o Dynamic Method Dispatch è un processo in cui una chiamata a un metodo sovrascritto è risolta in runtime piuttosto che in compile-time.
In questo processo, un metodo sovrascritto è chiamato attraverso la variabile di riferimento di una superclasse. La determinazione del metodo da chiamare si basa sull’oggetto a cui fa riferimento la variabile di riferimento.
Comprendiamo innanzitutto l’upcasting prima del polimorfismo di runtime.
Upcasting
Se la variabile di riferimento della classe Parent si riferisce all’oggetto della classe Child, si parla di upcasting. Per esempio:
Per l’upcasting, possiamo usare la variabile di riferimento di tipo classe o di tipo interfaccia. Per esempio:
Qui, la relazione della classe B sarebbe:
B IS-A AB IS-A IB IS-A Object
Siccome Object è la classe radice di tutte le classi in Java, così possiamo scrivere B IS-A Object.
Esempio di polimorfismo runtime Java
In questo esempio, stiamo creando due classi Bike e Splendor. La classe Splendor estende la classe Bike e sovrascrive il suo metodo run(). Stiamo chiamando il metodo run dalla variabile di riferimento della classe Parent. Siccome si riferisce all’oggetto della sottoclasse e il metodo della sottoclasse sovrascrive il metodo della classe Genitore, il metodo della sottoclasse viene invocato a runtime.
Poiché l’invocazione del metodo è determinata dalla JVM e non dal compilatore, è noto come polimorfismo runtime.
Testalo ora
Output:
running safely with 60km.
Esempio di polimorfismo runtime Java: Banca
Considera uno scenario in cui Banca è una classe che fornisce un metodo per ottenere il tasso di interesse. Tuttavia, il tasso di interesse può essere diverso a seconda delle banche. Per esempio, le banche SBI, ICICI e AXIS forniscono un tasso di interesse dell’8,4%, 7,3% e 9,7%.
Nota: Questo esempio è dato anche nell’override del metodo ma non c’è stato upcasting.
Prova ora
Output:
SBI Rate of Interest: 8.4ICICI Rate of Interest: 7.3AXIS Rate of Interest: 9.7
Esempio di polimorfismo Java Runtime: Shape
Testalo ora
Output:
drawing rectangle...drawing circle...drawing triangle...
Java Runtime Polymorphism Example: Animal
Test it Now
Output:
eating bread...eating rat...eating meat...
Java Runtime Polymorphism with Data Member
Un metodo viene sovrascritto, non i membri dei dati, quindi il polimorfismo runtime non può essere raggiunto dai membri dei dati. Stiamo accedendo al membro di dati tramite la variabile di riferimento della classe Parent che si riferisce all’oggetto della sottoclasse. Poiché stiamo accedendo al membro di dati che non è sovrascritto, quindi accederà sempre al membro di dati della classe Genitore.
Regola: Il polimorfismo di runtime non può essere raggiunto dai membri dati.
Testalo ora
Output: