Annotations: @Override

DOMANDA:

Perché si utilizza l'annotazione @Override? A cosa serve e quali sono i vantaggi?


RISPOSTA:

@Override è una annotazione aggiunta a partire da Java 5 ed utilizzata per indicare al compilatore che il metodo su cui è posta sta effettuando un override (sovrascrittura) di un metodo della sua superclasse o, da Java 6, anche di un'interfaccia.

La domanda nasce spontanea: "cosa cambia se non lo utilizzo?". Proviamo a fare un override sul metodo equals() della superclasse Object:
public class Animale{
  private String nome;

  public boolean equals(Animale animale){
    return nome.equals(animale.nome);
  }
}
Come si nota non abbiamo utilizzato @Override... e infatti non stiamo effettuando un override, bensì un overloading! Sicuramente la maggior parte di voi non avrà fatto caso all'errore. Il metodo equals() ereditato della classe Object accetta come parametro un Object (non un Animale), di conseguenza il compilatore riconoscerà il metodo equals() della classe Animale() come un metodo aggiuntivo e non come uno che sovrascrive l'originale.

La risposta è quindi facile: @Override nasce per soddisfare esigenze di pratiche di buona programmazione e facilitare il programmatore nel prevenire errori di difficile individuazione (come nel caso dell'esempio).

Inserendo @Override nella classe Animale otterremmo infatti un errore:
public class Animale{
  private String nome;
  
  @Override
  public boolean equals(Animale animale){
    return nome.equals(animale.nome);
  }
}
Il compilatore non ci permetterà di creare il .class fornendo a video il seguente messaggio:
The method equals(Animale) of type Animale must override or implement a supertype method

Invece, se utilizzassimo correttamente @Override potremmo compilare la classe Animale correttamente:
package override;

public class Animale{
  private String nome;

  @Override
  public boolean equals(Object animale){
    return nome.equals(((Animale) animale).nome);
  }
}


Commenti

Posta un commento

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java