Overloading
modificaOgni metodo di un determinato tipo ha un nome associato. In realtà, il nome da solo non è sufficiente ad identificare il metodo. Gli elementi che identificano il metodo sono collettivamente chiamati signature e sono determinati da
- nome del metodo
- numero e dal tipo degli argomenti
Il nome degli argomenti non conta.
Metodi con lo stesso nome, ma diverse liste di argomenti, sono a tutti gli effetti diversi agli occhi del compilatore e del programma Java. Il motivo principale è che ciò permette di raggruppare insieme dei metodi concettualmente simili o che compiono le stesse operazioni:
class Persona {
public void guida(Bicicletta b) { ... }
public void guida(Automobile a) { ... }
public void guida(Aeroplano a) { ... }
}
Se un client invoca
Persona p = ...;
p.guida(mezzo);
il compilatore sceglie la versione del metodo guida
più adatta a seconda del tipo della variabile mezzo
.
Attenzione: la scelta viene determinata solo sulla base del tipo a tempo di compilazione. Quindi, se Bicicletta
, Automobile
e Aeroplano
sono sottotipi di un tipo comune MezzoDiTrasporto
, e mezzo
è una variabile di tipo MezzoDiTrasporto
, allora il compilatore protesta richiedendo che venga specificata quale delle tre versioni va invocata.
L'overloading è supportato anche per i costruttori. Questo permette di dare al client la possibilità di costruire un oggetto in modi diverse a seconda della specifica lista di parametri utilizzata.
Overriding
modificaPer approfondire, vedi Ereditarietà. |
Metodi nativi
modificaQuesta sezione è ancora vuota; aiutaci a scriverla! |