Polimorfismo dentro Java (Statico e Dinamico)
In cosa consiste il polimorfismo Java?
Polimorfismo in Java si verifica quando ci sono una o piรน classi o oggetti legati tra loro per ereditarietร . ร la capacitร di un oggetto di assumere molte forme. L'ereditarietร consente agli utenti di ereditare attributi e metodi e il polimorfismo utilizza questi metodi per eseguire attivitร diverse. Quindi lโobiettivo รจ la comunicazione, ma lโapproccio รจ diverso.
Ad esempio, hai uno smartphone per comunicare. La modalitร di comunicazione che scegli potrebbe essere qualsiasi cosa. Puรฒ essere una chiamata, un messaggio di testo, un messaggio con immagine, una posta, ecc. Quindi, l'obiettivo รจ comune, ovvero la comunicazione, ma il loro approccio รจ diverso. Questo รจ chiamato Polimorfismo. Ora impareremo il polimorfismo Java con esempio.
Clicchi Qui. se il video non รจ accessibile
Java Polimorfismo negli OOP con esempio
Abbiamo una classe padre, 'Account' con funzione di deposito e prelievo. Account ha 2 classi figlio. L'operazione di deposito e prelievo รจ la stessa per i conti di risparmio e di controllo. Quindi i metodi ereditati dalla classe Account funzioneranno.

Modifica dei requisiti software
C'รจ un cambiamento nella specifica dei requisiti, qualcosa che รจ cosรฌ comune nel settore del software. Dovresti aggiungere la funzionalitร Conto bancario privilegiato con funzione di scoperto. Per un background, lo scoperto รจ una funzione in cui puoi prelevare un importo superiore al saldo disponibile nel tuo conto. Quindi, il metodo di prelievo per i privilegiati deve essere implementato di nuovo. Ma non modifichi il pezzo di codice testato nel conto di risparmio e di controllo. Questo รจ un vantaggio di OOPS
Passo 1) In modo tale che quando viene chiamato il metodo "ritirato" per il conto di risparmio, viene eseguito un metodo dalla classe del conto padre
Passo 2) Ma quando il metodo "Prelievo" per il conto privilegiato (facoltร di scoperto) viene chiamato, viene eseguito il metodo di prelievo definito nella classe privilegiata. Questo รจ Polimorfismo negli OOP.
Metodo Override in Java
Il metodo Overriding sta ridefinendo un metodo di superclasse in una sottoclasse.
Regole per la sostituzione del metodo
- La firma del metodo, ovvero il nome del metodo, l'elenco dei parametri e il tipo restituito, devono corrispondere esattamente.
- Il metodo sovrascritto puรฒ ampliare l'accessibilitร ma non restringerla, ovvero se รจ privato nella classe base, la classe figlia 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 e override
| L'overload dei metodi รจ nella stessa classe, dove piรน metodi hanno lo stesso nome ma firme diverse. | L'override del metodo avviene quando uno dei metodi della superclasse viene ridefinito nella sottoclasse. In questo caso, la firma del metodo rimane la stessa. |
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 negli OOP รจ il meccanismo mediante il quale รจ possibile definire piรน metodi con lo stesso nome e firma nella superclasse e nella sottoclasse. La chiamata a un metodo sottoposto a override viene risolta in fase di esecuzione.
Esempio di polimorfismo dinamico:
Una variabile di riferimento della super classe puรฒ fare riferimento a un oggetto della sottoclasse
Doctor obj = new Surgeon();
Considera la dichiarazione
obj.treatPatient();
Qui la variabile di riferimento "obj" appartiene alla classe genitore, ma l'oggetto a cui punta appartiene alla classe figlia (come mostrato nell'esempio di polimorfismo seguente).
obj.treatPatient() eseguirร il metodo TreatPatient() della sottoclasse โ Chirurgo
Se viene utilizzato un riferimento alla classe base per chiamare un metodo, il metodo da invocare viene deciso dalla JVM, a seconda dell'oggetto a cui punta il riferimento
Ad esempio, anche se obj รจ un riferimento a Doctor, richiama il metodo Surgeon, poichรฉ punta a un oggetto Surgeon
Questo viene deciso durante il runtime e quindi definito dinamico or polimorfismo in fase di esecuzione
Differenza tra polimorfismo statico e dinamico
Polimorfismo statico in Java รจ un tipo di polimorfismo che raccoglie le informazioni per chiamare un metodo in fase di compilazione, mentre il polimorfismo dinamico รจ un tipo di polimorfismo che raccoglie le informazioni per chiamare un metodo in fase di esecuzione.
| Si riferisce al sovraccarico del metodo. | Si riferisce all'override del metodo. |
| Gli eventuali errori vengono risolti in fase di compilazione. Poichรฉ il codice non viene eseguito durante la compilazione, da qui il nome static.
Es: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
Nel caso in cui una variabile di riferimento chiami 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, da qui 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 la sua specifica funzionalitร ? In questo caso, la parola chiave superpuรฒ 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 super classe nella sottoclasse.
Successivamente, impareremo la parola chiave Super, Ereditร e Polimorfismo in Java con programmi di esempio.
Esempio:-Per imparare l'ereditarietร , il polimorfismo e la super parola chiave
Passo 1) Copia il seguente codice 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(){
// overriden 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. Osservare l'output.
Passo 3) Decommenta le righe n. 6-9. Salva, compila ed esegui il codice. Osservare l'output.
Passo 4) Decommenta la riga n. 10 . Salva e compila il codice.
Passo 5) Errore = ? Questo perchรฉ la sottoclasse non puรฒ accedere ai membri privati โโdella superclasse.
Sintesi
- Il polimorfismo nella programmazione orientata agli oggetti si verifica quando ci sono una o piรน classi o oggetti legati tra loro per ereditarietร . ร la capacitร di un oggetto di assumere molte forme.
- Il metodo Overriding sta ridefinendo un metodo di superclasse in una sottoclasse.
- Polimorfismo dinamico in Java รจ il meccanismo mediante il quale รจ possibile definire piรน metodi con lo stesso nome e firma nella superclasse e nella sottoclasse.
- Polimorfismo statico in Java รจ un tipo di polimorfismo che raccoglie le informazioni per chiamare un metodo in fase di compilazione, mentre il polimorfismo dinamico รจ un tipo di polimorfismo che raccoglie le informazioni per chiamare un metodo in fase di esecuzione.
- La parola chiave Super puรฒ essere utilizzata per accedere ai metodi della classe padre dalla classe figlia.




