Override e Overload in Java
Analizziamo con dei semplici esempi di codice queste due tecniche che talvolta vengono confuse dai programmatori
Overload
In Java ogni classe identifica i suoi metodi attraverso la signature, ovvero
1 |
public void metodo(Parametro parametro) |
La signature quindi specifica il livello di accesso del metodo (public in questo caso), il tipo che viene ritornato (void in questo caso), il nome del metodo e i parametri richiesti. Java attraverso la tecnica dell’overload ci permette di avere due metodi con nome uguale all’interno della nostra classe. Questi due metodi per essere però identificati dovranno chiaramente avere una signature differente.
Questa tecnica è utile quando dobbiamo definire metodi simili, ma con funzionalità leggermente differenti. Un esempio classico di overload di metodi è quello riportato nel codice seguente
1 2 3 4 5 6 |
public int somma(int a, int b) { return a+b; } public int somma(int a, int b, int c) { return a+b+c; } |
Qui abbiamo definito due metodi “somma” che presentano però delle differenze per quanto riguarda i parametri.
Override
L’override di un metodo in Java permette invece di ridefinire un metodo della classe padre. Allora pensiamo di avere la classe A con il metodo saluta() così definito
1 2 3 4 5 |
class A { public void saluta(String message){ System.out.println(message); } } |
Abbiamo inoltre una classe B che estende semplicemente A
1 2 |
class B extends A{ } |
Ora vogliamo ridefinire nella classe B il metodo saluta(), perchè il metodo della classe A non fa quello che noi vorremmo nella classe B. Quello che dobbiamo fare, ovvero l’override del metodo, è semplicemente ridefinire il metodo saluta() con la stessa signature del metodo della classe A, ma cambiandone chiaramente il codice.
1 2 3 4 5 6 |
class B extends A{ public void saluta(String message) { System.out.println("Il metodo nuovo ti saluta con questo messaggio: "+message); } } |
In questo modo abbiamo il nuovo metodo per la classe B. Ci sono delle restrizioni che dobbiamo considerare. Prima di tutto non possiamo fare l’override di un metodo final e soprattutto non possiamo modificare la signature del metodo, possiamo soltanto aumentare la visibilità del metodo (public, private, protected) e non diminuirla.