L'overriding dei metodi è un meccanismo di OOP in cui la sottoclasse fornisce una propria implementazione di un metodo già definito nella sua superclasse. Il metodo nella sottoclasse deve avere lo stesso nome, parametri e tipo di ritorno (o essere un suo sottotipo).
Regole chiave:
@Override aiuta a rilevare errori durante la fase di compilazione.Esempio:
class Animal { public void sound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override public void sound() { System.out.println("Woof"); } }
Domanda: "È possibile sovrascrivere un metodo statico in Java?"
Risposta: No, i metodi statici non possono essere sovrascritti. Vengono nascosti (method hiding). Se dichiari un metodo statico con la stessa firma nella sottoclasse, si verifica un nascondimento, non un overriding.
Esempio:
class A { static void print() { System.out.println("A"); } } class B extends A { static void print() { System.out.println("B"); } } A obj = new B(); obj.print(); // stamperà "A"
Storia
In un progetto, uno degli sviluppatori ha tentato di "sovrascrivere" un metodo statico nella classe derivata, aspettandosi di chiamare la versione della sottoclasse tramite il riferimento della superclasse. Questo ha portato a risultati inaspettati: veniva chiamato il metodo della superclasse, il che portava a un comportamento errato del programma.
Storia
È importante utilizzare l'annotazione
@Override. In un progetto, uno sviluppatore ha commesso un errore nel nome del metodo durante l'overriding, e senza l'annotazione il compilatore non ha segnalato l'errore. Di conseguenza, è stato chiamato il metodo della classe base (di default) attraverso la gerarchia di ereditarietà, il che ha causato una logica errata nei processi aziendali.
Storia
Sovrascrittura delle eccezioni checked: uno sviluppatore ha aggiunto al metodo sovrascritto il lancio di una nuova eccezione checked che non era specificata nella firma originale. Il codice si è compilato con errore e ha costretto a cambiare l'architettura, poiché ciò viola la regola di overriding delle eccezioni.