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

Le regole per l’ overload di un metodo sono:

  • 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) {}
/**/
I seguenti metodi sono sovraccarichi legali del metodo cambiareMisura():
/**/            
public void cambiareMisura(int misura, String nome) {}
public int cambiareMisura(int misura, float campione) {}
public void cambiareMisura(float campione, String nome) throws IOException {}
/**/
Come invocare un metodo overload
Ciò che definisce qual è il metodo da chiamare sono gli argomenti che vengono passati durante la chiamata. Se si invoca un metodo con un 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);
  }
}
/**/
Quando si esegue il codice di sopra si ottiene quanto segue:
#
Metodo che riceve interi.
Metodo che riceve float.
Metodo che riceve una stringa: una stringa
#
Con l’utilizzo di oggetti, al posto dei tipi primitivi o stringhe, tutto diventa più interessante. Vediamo cosa succede quando si ha un metodo di overload che in una versione prende un 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);
  }
}
/**/
Quando si esegue il codice di sopra si ottiene:
#
Metodo di parametro Animale...
Metodo di parametro Cavallo...
#
Come previsto, ogni oggetto chiama al metodo secondo il tipo di parametro. Cosa succederebbe se creiamo un riferimento ad Animale su un oggetto Cavallo?
Animale oggettoAnimaleRefCavallo = new Cavallo();
animali.MetodoSovracCaricato(oggettoAnimaleRefCavallo);
Il risultato è:
#
Metodo di parametro Animale...
#
Anche se in fase di esecuzione l’oggetto è 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 
*/
Regole per l'overload e l'override dei metodi
Ora che abbiamo visto entrambe le forme di riscrivere i metodi, passiamo in rassegna le regole e le differenze tra i due tipi di riscrittura:
Argomenti
In un metodo di overload gli argomenti debbono essere cambiati, mentre nel metodo override non dovrebbero cambiare.
Il tipo di restituzione
In un metodo di overload il tipo di ritorno può cambiare; in un metodo di override non può cambiare, se non per i sottotipi del tipo inizialmente dichiarato.
Eccezioni
In un metodo di overload le eccezioni possono cambiare; in un metodo di override possono essere ridotti o eliminati, ma non si debbono generare nuove eccezioni o ampliarle.
Accesso
In un metodo di overload l’accesso può cambiare; in un metodo di override l’accesso non dovrebbe essere più restrittivo (può essere meno restrittivo).
Invocazione
In un metodo di overload gli argomenti sono quelli che determinano quale metodo deve essere invocato; in un metodo override il tipo di oggetto determina il metodo.
Questo è, in sintesi, tutto ciò che riguarda l’ overloading dei metodi in Java. Qualche dubbio? Lascia un commento.
Similari
Python per tutti
546% Python
Python para todos è un libro sulla programmazione in Python. Questo è un tutoriale su Python adatto a tutti i livelli e si può scaricare in pdf gratuitamente in spagnolo. Il tutoriale di Python…
Fondamentali di jQuery
217% JQuery
jQuery stà diventando rapidamente uno strumento che ogni sviluppatore web di interfacce dovrebbe conoscere. Lo scopo di questo libro è di fornire una panoramica della biblioteca, in modo che qu…
Guida allo Zend Framework
174% Zend
Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller). Cosa è lo Zend Framework? Framework per la costruzione di siti web più veloci e …
Iteratori in PHP
78% Php
Iterator è uno dei più noti modelli di progettazione grazie al suo utilizzo in diversi linguaggi di programmazione come Python, Java, C++ e PHP. Fondamentalmente ciò che questo modello propone è di trasferire la responsabi…
Funzioni popolari per gestire le stringhe
77% Php
PHP ha una vasta scelta di funzioni integrate per la gestione delle stringhe che permettono di manipolarle facilmente in quasi ogni modo possibile. Tuttavia, imparare tutte queste funzioni, ricordando quello che fanno e qu…