Polimorfismo
- Una variabile di un certo tipo A può contenere un riferimento au un oggetto del tipo A o di qualsiasi sua sottoclasse
Animale a = new Gatto();
a = new Chihuahua();
- La selezione del metodo da chiamare avviene in base all’effettivo tipo dell’oggetto riferito dalla variabile
Animale a = new Gatto();
a.emettiVerso();
a = new Chihuahua();
a.emettiVerso();
A cosa serve il polimorfismo?
- Serve per utilizzare facilmente e senza differenziazioni formali oggetti diversi ma con caratteristiche comuni
Binding
Cos’è?
- Processo in cui ogni variabile è associata al suo tipo (su python è automatico)
- In Java è esplicito
Binding statico
- Stabilisce i tipi delle variabili durante la compilazione del programma
Binding dinamico
- I tipi vengono stabiliti durante l’esecuzione (nel caso di java viene eseguito dalla java virtual machine)
Conversione fra sottoclasse e superclasse
- Posso sempre convertire senza cast esplicito un sottotipo a un supertipo (upcasting)
ImpiegatoStipendiato is1 = new ImpiegatoStipendiato ("mario", "mp1", 1500)
Impiegato i = is1;
- A volte può essere necessario convertire un supertipo a un sottotipo (downcasting)
- Richiede un cast esplicito
ImpiegatoStipendiato is2 = (ImpiegatoStipendiato)i;
Superclasse universale Object
- Tutte le classi in Java ereditano direttamente o indirettamente dalla classe Object
- tutti i suoi 11 metodi sono ereditati
- Quando si definisce una classe senza estenderne un’altra:
public class LaMiaClasse()
{
}
- questo equivale a estendere Object:
public class LaMiaClasse extends object()
{
}
Metodi principali della classe Object
f