Esistono due modalità in java per definire più versioni dello stesso metodo: l’overloading e l’overriding.
Overloading
Si possono definire più versioni, dello stesso metodo, variando il numero e il tipo dei parametri, e/o la visibilità. L’overloading può essere fatto nella stessa classe o anche nelle classi derivate.
Esempio
class A { public void hello() { } } public class B extends A{ public void hello(int i) { } public void hello(String g) { } public void hello(int i, String h, int k) { } }
Se si tenta di modificare solo il tipo di ritorno di un metodo, ossia abbiamo due metodi identici tranne per il tipo di ritorno, otteniamo un errore di compilazione. Java li considera come se fossero due metodi uguali. Stessa cosa per la visibilità.
Esempio
package com; class A { public void hello() { } } public class B extends A { public int hello(int i) {// errore: metodo duplicato return 1; } public String hello(int i) {// errore: metodo duplicato return ""; } }
Overriding
Una classe derivata può avere un metodo identico ad un metodo già presente nella classe base. Qesta operazione di riscrittura è nota come ovverride.
Esempio
package com; class A { public void hello() { System.out.println("metodo del padre"); } public void prova() { System.out.println("prova"); } } public class B extends A { public void hello() { System.out.println("metodo del figlio"); } public static void main(String[] args) { B tmp = new B(); tmp.hello();//stampa "metodo del figlio", perchè stato fatto l'override del metodo tmp.prova();// stampa "prova", questo metodo appartiene al padre } }
Se ti può interessare, c’è anche la versione video di questo articolo: