Polimorfismo

  1. 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();
  1. 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