@Override

@Override ist eine Annotation, welche ausschließlich auf Methoden anwendbar ist. Sie wird verwendet um Methoden zu kennzeichnen, die eine andere überschreiben soll. Tut eine gekennzeichnete Methode dies nicht, so gibt der Compiler eine Warnung aus. Das soll verhindern, dass Programmierer versehentlich eine Methode überladen anstatt sie zu überschreiben. Durch diese Annotation können solche Fehler früh erkannt werden. Zum Beispiel könnte ein Programmierer folgende equals() Methode schreiben.


1  public boolean equals(Foo that) {
2    //...
3  }

Gemeint war aber eigentlich diese:


1  public boolean equals(Object that) {
2    //...
3  }

Ohne die @Override Annotation würden beide Methoden ohne Probleme compiliert werden. Nutzt man aber @Override, so wird schon vom Compiler eine Warnung generiert. So würde folgendes Beispiel


1  public class Test {
2  /**
3    * Überschreibt die <code>equals</code> Methode
4    * von <code>Object</code>
5    */
6    @Override
7    public boolean equals( Test t) {
8      return true;
9    }
10  }

diese Meldung verursachen:


  Test.java:3: method does not override a method from its superclass
          @Override
           ^
  1 error

Wird jedoch eine Methode mit @Override versehen, die eine Methode eines Super-Intefaces überschreibt, so generiert der Compiler eine Fehlermeldung. Der Grund hierfür ist, dass die Methoden eines zu implementierenden Interfaces überschrieben werden müssen, daher ist eine zusätzliche Verwendung von @Override überflüssig. Daraus resultiert auch, dass @Override nicht innerhalb von interface-Deklarationen verwendet werden kann.