@Alex: me n'ero accorto e avevo modificato al volo.
@stefanone49: è facoltativo, ma non si aggiunge solo per chiarezza di lettura. Al contrario, serve a evitare errori "stupidi". Questo tipo di annotazione viene letto dal compilatore che, quindi, attua alcuni meccanismi di controllo. Tramite quell'annotazione noi stiamo dicendo al compilatore che stiamo facendo l'override di un metodo ereditato. Il compilatore, quindi, va a verificare se questa cosa è vera, cioè: cerca in tutte le superclassi e interfaccie se esiste quel metodo. Se lo trova, tutto ok. Se non lo trova, il compilatore segnala l'errore. Questo è molto utile per evitare, appunto, errori "stupidi" come il nome di un metodo digitato male.
Esempio:
codice:public class Pippo { ... public String toStringa() { return "ciao"; } }
Senza l'annotazione, il compilatore tira dritto e non ha alcuna possibilità di sapere se vi sono errori (osserva bene quel metodo: ho scritto male ed ho aggiunto una "a" alla fine). Io sono convinto di aver correttamente fatto l'override del metodo "toString()", in realtà ho solo definito un nuovo metodo, che nessuno userà mai. Per il compilatore non c'è nessun errore. Ma quando eseguo, non otterrò mai la scritta "ciao" quando butto in output un oggetto di classe Pippo. E così sono costretto a perdere un sacco di tempo a caccia del problema... un problema "subdolo" che difficilmente salta all'occhio.
Aggiungendo l'annotazione, invece, è il compilatore che si accorge subito del problema: lui controllerà se le superclassi (in questo caso, Object) contengono un metodo chiamato "toStringa()", che restituisce un String. Non lo trova e segnala l'errore.
Quindi, non è obbligatorio metterla, ma è un modo per assicurarci di star facendo la cosa giusta, quindi è consigliabile.
Ciao.![]()




Rispondi quotando