2010-12-03 9 views
66
public class NaiveAlien extends Alien 
{ 

    @Override 
    public void harvest(){} 

} 

Ich habe versucht, den Code meines Freundes zu verstehen, und ich bekomme nicht die Syntax, @Override im Code. Was macht das und warum brauchen wir in der Codierung? Danke.Was bedeutet @Override?

Antwort

122

Es ist ein Hinweis für den Compiler, um es wissen zu lassen, dass Sie die Methode einer Elternklasse (oder Schnittstelle in Java 6) überschreiben.

Wenn der Compiler feststellt, dass keine Funktion zum Überschreiben vorhanden ist, wird eine Warnung ausgegeben (oder ein Fehler).

Dies ist sehr nützlich, um Tippfehler oder API-Änderungen schnell zu identifizieren. Angenommen, Sie versuchen, die Methode harvest() Ihrer Elternklasse außer Kraft zu setzen, aber buchstabieren Sie harvset(), wird Ihr Programm automatisch die Basisklasse aufrufen, und ohne @Override hätten Sie keine Warnung darüber.

Wenn Sie eine Bibliothek verwenden und in Version 2 der Bibliothek harvest() geändert wurde, um einen ganzzahligen Parameter zu verwenden, würden Sie diesen nicht mehr überschreiben. Auch hier würde @Override Ihnen schnell sagen.

+14

Beachten Sie, dass @Override nur für öffentliche und geschützte Funktionen funktioniert. – MrMas

+0

Es sollte auch erwähnt werden, dass ** mehrere ** Annotationen möglich sind und dass auch anderer Code hinzugefügt werden kann. Zum Beispiel beim Überprüfen von Berechtigungen in Android M-Apps, wie dies im [PermissionsDispatcher] (https://github.com/hotchemi/PermissionsDispatcher) geschieht. – not2qubit

9

@Override bedeutet, dass Sie die Basisklassenmethode überschreiben. In Java 6 bedeutet dies auch, dass Sie eine Methode von einer Schnittstelle implementieren. Es schützt Sie vor Tippfehlern, wenn Sie denken, dass Sie eine Methode außer Kraft setzen, aber Sie haben sich etwas vertippt.

23

Diese Funktion wird als Annotation bezeichnet. @Override ist die Syntax der Verwendung einer Annotation, um den Compiler wissen zu lassen, "Hey Compiler, ich ändere, was Ernte in der Elternklasse tut", dann kann der Compiler sofort sagen, "Mann, Sie benennen es falsch". Der Compiler wird erst kompiliert, wenn Sie ihn korrekt benennen.

Also, ohne diese @Override Annotation, wird der Compiler nicht Fehler und es wird eine neue Methodendeklaration betrachtet werden. Es wäre schwierig, den Fehler an diesem Punkt zu erkennen.

+29

Ich wünsche Compiler Warnungen und Fehler adressiert mich als "Kumpel". – CSJ

+1

Großschreibung spielt eine Rolle, wir reden von '@ Override', Alter :) – datafiddler