Java/Metodi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
taglio
Riga 68:
 
I metodi possono restituire un valore particolare al chiamante oppure no. Quando si vuole restituire un valore il chiamante diverrà tale valore. La restituzione di un valore si ha con l'enunciato "'''return'''" ed il '''tipo del valore restituito indicato''' prima del nome del metodo. Se non si vuole restituire un valore o un dato particolare allora non occorre return e prima del nome del metodo c'è bisogno dell'enunciato "'''void'''". Quindi, prima del nome del metodo, ci deve essere <u> o il "void" o il tipo del valore (con all'interno del corpo la clausola "return")</u>.
 
== Overloading ==
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:
<source lang="Java">
class Persona {
public void guida(Bicicletta b) { ... }
public void guida(Automobile a) { ... }
public void guida(Aeroplano a) { ... }
}
</source>
 
Se un client invoca
<source lang="Java">
Persona p = ...;
p.guida(mezzo);
</source>
 
il compilatore sceglie la versione del metodo <code>guida</code> più adatta a seconda del tipo della variabile <code>mezzo</code>.<br/>
'''Attenzione''': la scelta viene determinata solo sulla base del tipo ''a tempo di compilazione''. Quindi, se <code>Bicicletta</code>, <code>Automobile</code> e <code>Aeroplano</code> sono sottotipi di un tipo comune <code>MezzoDiTrasporto</code>, e <code>mezzo</code> è una variabile di tipo <code>MezzoDiTrasporto</code>, 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 ==
{{vedi anche|Java/Ereditarietà#Overriding{{!}}Ereditarietà}}
 
== Metodi nativi ==
{{...}}
 
== Precondizioni e postcondizioni: cosa sono e a cosa servono ==