Java/Metodi/2: differenze tra le versioni
mNessun oggetto della modifica |
Correggo tag deprecato |
||
Riga 8: | Riga 8: | ||
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: |
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: |
||
< |
<syntaxhighlight lang="Java"> |
||
class Persona { |
class Persona { |
||
Riga 16: | Riga 16: | ||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
Se un client invoca |
Se un client invoca |
||
< |
<syntaxhighlight lang="Java"> |
||
Persona p = ...; |
Persona p = ...; |
||
p.guida(mezzo); |
p.guida(mezzo); |
||
</syntaxhighlight> |
|||
</source> |
|||
il compilatore sceglie la versione del metodo <code>guida</code> più adatta a seconda del tipo della variabile <code>mezzo</code>.<br/> |
il compilatore sceglie la versione del metodo <code>guida</code> più adatta a seconda del tipo della variabile <code>mezzo</code>.<br/> |
Versione attuale delle 21:09, 4 giu 2020
Overloading[modifica]
Ogni 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[modifica]
Per approfondire, vedi Ereditarietà. |
Metodi nativi[modifica]
Questa sezione è ancora vuota; aiutaci a scriverla! |