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 seguenti metodi sono sovraccarichi legali del metodo
Come invocare un metodo 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) {} /**/
cambiareMisura()
:/**/ public void cambiareMisura(int misura, String nome) {} public int cambiareMisura(int misura, float campione) {} public void cambiareMisura(float campione, String nome) throws IOException {} /**/
⤽
Ciò che definisce qual è il metodo da chiamare sono gli argomenti che vengono passati durante la chiamata. Se si invoca un metodo con un
Esempio di una classe con un metodo di overload:
Quando si esegue il codice di sopra si ottiene quanto segue:
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
Quando si esegue il codice di sopra si ottiene:
Come previsto, ogni oggetto chiama al metodo secondo il tipo di parametro. Cosa succederebbe se creiamo un riferimento ad
Il risultato è:
Anche se in fase di esecuzione l’oggetto è
L’unico caso in Java di sovraccarico(overload) di un operatore è +:
Regole per l'overload e l'override dei metodiString
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); } } /**/
# Metodo che riceve interi. Metodo che riceve float. Metodo che riceve una stringa: una stringa #
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); } } /**/
# Metodo di parametro Animale... Metodo di parametro Cavallo... #
Animale
su un oggetto Cavallo
?Animale oggettoAnimaleRefCavallo = new Cavallo(); animali.MetodoSovracCaricato(oggettoAnimaleRefCavallo);
# Metodo di parametro Animale... #
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 */
⤽
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
Questo è, in sintesi, tutto ciò che riguarda l’ overloading dei metodi in Java. Qualche dubbio? Lascia un commento.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.
Similari
⋮ Python per tutti ⋮
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 ⋮
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 ⋮
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 …
⋮ Funzioni popolari per gestire le stringhe ⋮
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…
⋮ Iteratori in PHP ⋮
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…
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…

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…

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 …
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…
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…
Aggiungi un commento