Polimorfismo dentro Java (Statico e Dinamico)
⚡ Riepilogo intelligente
Polimorfismo dentro Java Consente a un'unica interfaccia di rappresentare molteplici forme, in modo che un singolo nome di metodo si comporti in modo diverso nelle classi correlate. È un pilastro della progettazione orientata agli oggetti che promuove la flessibilità, il riutilizzo del codice e l'estensione pulita dei sistemi legacy bancari, medici e aziendali.
In cosa consiste il polimorfismo Java?
Polimorfismo dentro Java Si verifica quando una o più classi o oggetti sono correlati tra loro tramite l'ereditarietà. È la capacità di un oggetto di assumere molteplici forme. L'ereditarietà consente agli utenti di ereditare attributi e metodi, e il polimorfismo utilizza questi metodi per svolgere compiti diversi. L'obiettivo è la comunicazione, sebbene l'approccio possa variare.
Ad esempio, uno smartphone viene utilizzato per comunicare. La modalità di comunicazione può essere una chiamata, un messaggio di testo, un messaggio con immagini o un'e-mail. L'obiettivo è comune, ovvero comunicare, ma l'approccio è diverso. Questo comportamento è l'essenza di PolimorfismoOra impareremo il polimorfismo in Java con esempi di codice, diagrammi e spiegazioni dettagliate passo passo.
Clicchi Qui. se il video non è accessibile
Perché utilizzare il polimorfismo in Java?
Polimorfismo dentro Java Questo schema viene utilizzato perché rende il codice flessibile, riutilizzabile e più facile da manutenere. Una singola variabile di riferimento di un tipo padre può puntare a diversi oggetti figli, quindi la stessa chiamata si adatta a qualsiasi sottoclasse venga fornita. Questo schema mantiene il codice testato inalterato mentre vengono aggiunti nuovi comportamenti tramite sottoclassi specializzate, ed è proprio per questo che framework come Spring e Jakarta EE ne fanno uso.
Java Polimorfismo negli OOP con esempio
Consideriamo una classe genitore denominata Account con funzioni per deposito e prelievo. La classe Account ha due classi figlie. L'operazione di deposito e prelievo è la stessa per i conti di risparmio e i conti correnti, quindi i metodi ereditati dalla classe Account funzioneranno.
Java Esempio di polimorfismo
Modifica dei requisiti software
C'è una modifica nella specifica dei requisiti, cosa comune nel settore del software. La funzionalità per un conto bancario privilegiato con possibilità di scoperto deve essere aggiunta. Lo scoperto è una funzionalità che consente a un cliente di prelevare un importo superiore al saldo disponibile sul conto. Il metodo di prelievo per il conto privilegiato necessita di una nuova implementazione, mentre il codice testato nei conti di risparmio e correnti rimane invariato. Questo isolamento è il vantaggio di OOPS.
Passo 1) Quando viene richiamato il metodo di prelievo per il conto di risparmio, viene eseguito il metodo definito nella classe padre Account.
Passo 2) Quando viene chiamato il metodo di prelievo per il conto privilegiato (facilità di scoperto), viene eseguito il metodo di prelievo definito nella classe privilegiata. Questo dispatch è Polimorfismo nella programmazione orientata agli oggetti.
Metodo Override in Java
L'override dei metodi è il processo di ridefinizione di un metodo della superclasse all'interno di una sottoclasse. La sottoclasse mantiene lo stesso comportamento.tract, ma fornisce una nuova implementazione che viene selezionata all'avvio del programma.
Regole per la sostituzione del metodo
- La firma del metodo, ovvero il nome del metodo, l'elenco dei parametri e il tipo di ritorno, deve corrispondere esattamente.
- Il metodo sovrascritto può ampliare l'accessibilità, ma non può restringerla. Se il metodo è privato nella classe base, la classe derivata può renderlo pubblico, ma non viceversa.
Esempio
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(); } }
Differenza tra sovraccarico del metodo e override del metodo
L'overloading dei metodi si verifica all'interno della stessa classe con lo stesso nome di metodo ma con firme diverse. L'override dei metodi si verifica tra classi padre e figlio, dove la sottoclasse ridefinisce un metodo dichiarato nella superclasse.
| L'overloading dei metodi si verifica nella stessa classe, dove più di un metodo ha lo stesso nome ma firme diverse. | L'override di un metodo si verifica quando uno dei metodi della superclasse viene ridefinito nella sottoclasse. In questo caso, la firma del metodo rimane invariata. |
Es:
void sum (int a , int b); void sum (int a , int b, int c); void sum (float a, double b); |
Es:
class X{ public int sum(){ // some code } } class Y extends X{ public int sum(){ //overridden method //signature is same } } |
Cos'è il polimorfismo dinamico?
Il polimorfismo dinamico nella programmazione orientata agli oggetti (OOP) è il meccanismo che permette di definire più metodi con lo stesso nome e la stessa firma sia nella superclasse che nella sottoclasse. La chiamata a un metodo sovrascritto viene risolta in fase di esecuzione tramite binding dinamico all'interno della JVM.
Esempio di polimorfismo dinamico
Una variabile di riferimento della superclasse può fare riferimento a un oggetto della sottoclasse:
Doctor obj = new Surgeon();
Considera la seguente affermazione:
obj.treatPatient();
Qui la variabile di riferimento obj appartiene alla classe padre, ma l'oggetto a cui punta appartiene alla classe figlia, come mostrato nel diagramma del polimorfismo.
La chiamata obj.treatPatient() eseguirà il metodo treatPatient() della sottoclasse Surgeon. Quando si utilizza un riferimento a una classe base per chiamare un metodo, il metodo invocato viene deciso dalla JVM in base all'oggetto effettivo a cui punta il riferimento. Anche se obj è un riferimento a Doctor, chiama il metodo di Surgeon, perché punta a un oggetto Surgeon. La decisione viene presa durante l'esecuzione, motivo per cui viene definita Polimorfismo dinamico o polimorfismo a tempo di esecuzione.
Differenza tra polimorfismo statico e dinamico
Polimorfismo statico in Java Il polimorfismo dinamico è un tipo di polimorfismo che raccoglie le informazioni per la chiamata di un metodo in fase di compilazione, mentre il polimorfismo dinamico è un tipo di polimorfismo che raccoglie le informazioni per la chiamata di un metodo in fase di esecuzione.
| Si riferisce al sovraccarico dei metodi. | Si riferisce alla sovrascrittura dei metodi. |
| Gli errori, se presenti, vengono risolti in fase di compilazione. Poiché il codice non viene eseguito durante la compilazione, il nome è statico.
Es: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Quando una variabile di riferimento chiama un metodo sovrascritto, il metodo da invocare è determinato dall'oggetto a cui punta la variabile di riferimento. Questo può essere determinato solo in fase di esecuzione, quando il codice è in esecuzione, ed è per questo che il nome è dinamico.
Es: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Super parola chiave in Java
Cosa succede se il metodo treatPatient nella classe Surgeon vuole eseguire la funzionalità definita nella classe Doctor e poi eseguire il proprio comportamento specifico? In questo caso la parola chiave super può essere utilizzato per accedere ai metodi della classe padre dalla classe figlia. Il metodo treatPatient nella classe Surgeon potrebbe essere scritto come:
treatPatient(){
super.treatPatient();
//add code specific to Surgeon
}
La parola chiave super può essere utilizzata per accedere a qualsiasi membro dati o metodo della superclasse all'interno della sottoclasse. Successivamente, impareremo a conoscere la parola chiave super, Ereditàe polimorfismo in Java con programmi di esempio.
Esempio: per imparare l'ereditarietà, il polimorfismo e la parola chiave super
Passo 1) Copiare il codice seguente in 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(){ // overridden 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"); } }
Passo 2) Salva, compila ed esegui il codice. Osserva l'output.
Passo 3) Rimuovi il commento dalle righe da 6 a 9. Salva, compila ed esegui il codice. Osserva l'output.
Passo 4) Rimuovi il commento dalla riga 10. Salva e compila il codice.
Passo 5) Errore = ? Questo accade perché la sottoclasse non può accedere ai membri privati della superclasse.






