Un metodo overload viene utilizzato per riutilizzare il nome di un metodo ma con argomenti diversi, opzionalmente con un differente tipo di ritorno.
Regole per overload
- I metodi di overload devono cambiare la lista degli argomenti.
- Possono cambiare il tipo di ritorno.
- Possono cambiare il modificatore di accesso.
- Possono dichiarare nuove o più ampie eccezioni.
- Un metodo può essere sovraccaricato nella stessa classe o in una sottoclasse.
Ecco un metodo cui si desidera fare l’overload:
public void cambiareMisura(int misura, String nome, float campione) {}
/**/
[/code]
cambiareMisura()
:public void cambiareMisura(int misura, String nome) {}
public int cambiareMisura(int misura, float campione) {}
public void cambiareMisura(float campione, String nome) throws IOException {}
/**/
[/code]
String
come argomento, si esegue il metodo che accetta un String
come argomento; se si chiama lo stesso metodo ma con un float
come argomento, viene eseguito il metodo che accetta un float
come argomento e così successivamente. Se un metodo viene invocato con un argomento che non è definito in nessuna delle versioni di overload il compilatore genera un messaggio di errore.Esempio di una classe con un metodo di overload:
public class SovracCaricho {
public void Numeri(int x, int y){
System.out.println("Metodo che riceve interi.");
}
public void Numeri(double x, double y){
System.out.println("Metodo che riceve float.");
}
public void Numeri(String stringa){
System.out.println("Metodo che riceve una stringa: "+ stringa);
}
public static void main(String[] args) {
SovracCaricho oggetto = new SovracCaricho();
int a = 1;
int b = 2;
double c = 1.3;
double d = 2.4;
String str = new String("una stringa");
oggetto.Numeri(a,b);
oggetto.Numeri(c,d);
oggetto.Numeri(str);
}
}
/**/
[/code]
Metodo che riceve interi.
Metodo che riceve float.
Metodo che riceve una stringa: una stringa
#
[/code]
Animale
come parametro e in un’altra un Cavallo
.class Animale {}
class Cavallo extends Animale {}
class Animali{
public void MetodoSovracCaricho(Animale a){
System.out.println("Metodo di parametro Animale…");
}
public void MetodoSovracCaricato(Cavallo c){
System.out.println("Metodo di parametro Cavallo…");
}
public static void main(String[] args) {
Animali animali = new Animali();
Animale oggettoAnimale = new Animale();
Cavallo oggettoCavallo = new Cavallo();
animali.MetodoSovracCaricato(oggettoAnimale);
animali.MetodoSovracCaricato(oggettoCavallo);
}
}
/**/
[/code]
Metodo di parametro Animale…
Metodo di parametro Cavallo…
#
[/code]
Animale
su un oggetto Cavallo
?animali.MetodoSovracCaricato(oggettoAnimaleRefCavallo);
[/code]
Metodo di parametro Animale…
#
[/code]
Cavallo
e non Animale
, la scelta di quale metodo di overload invocare non viene eseguita in modo dinamico in fase di esecuzione, il tipo di riferimento, non l’oggetto corrente, è ciò che determina quale metodo deve essere eseguito.L’unico caso in Java di sovraccarico(overload) di un operatore è +:
String str1= new String("Una stringa");
String str2= " altra atringa"
String str3 = str1 + str2;
/*
str2 conterrà: Una stringa altra atringa
*/
[/code]
Argomenti
Ancora nessun commento