Was bedeutet @Override?

74
public class NaiveAlien extends Alien
{

    @Override
    public void harvest(){}

}

Ich habe versucht, den Code meines Freundes zu verstehen, und ich verstehe die Syntax @Override nicht im Code. Was macht das und warum brauchen wir beim Codieren? Vielen Dank.

Woong-Sup Jung
quelle

Antworten:

131

Es ist ein Hinweis für den Compiler, dass er die Methode einer übergeordneten Klasse (oder Schnittstelle in Java 6) überschreibt.

Wenn der Compiler feststellt, dass keine zu überschreibende Funktion vorhanden ist, werden Sie gewarnt (oder es wird ein Fehler angezeigt).

Dies ist äußerst nützlich, um Tippfehler oder API-Änderungen schnell zu identifizieren. Angenommen, Sie versuchen, die Methode Ihrer Elternklasse zu überschreiben harvest(), buchstabieren sie jedoch harvset(). Ihr Programm ruft die Basisklasse stillschweigend auf, und ohne @Overridesie hätten Sie keine Warnung.

Wenn Sie eine Bibliothek verwenden und in Version 2 der Bibliothek harvest()so geändert wurden, dass sie einen ganzzahligen Parameter verwendet, wird dieser ebenfalls nicht mehr überschrieben. Wieder @Overridewürde ich Ihnen schnell sagen.

EboMike
quelle
18
Beachten Sie, dass @Override nur für öffentliche und geschützte Funktionen funktioniert.
MrMas
Es sollte auch erwähnt werden, dass auch mehrere Anmerkungen möglich sind und dass damit auch anderer Code hinzugefügt werden kann. Zum Beispiel beim Überprüfen von Berechtigungen in Android M-Apps, wie im PermissionsDispatcher .
not2qubit
29

Diese Funktion wird als Anmerkung bezeichnet. @Overrideist die Syntax der Verwendung einer Annotation, um den Compiler wissen zu lassen: "Hey Compiler, ich ändere, was die Ernte in der übergeordneten Klasse macht", dann kann der Compiler sofort sagen: "Alter, du benennst sie falsch". Der Compiler wird erst kompiliert, wenn Sie ihn richtig benannt haben.

Ohne diese @OverrideAnmerkung wird der Compiler also keine Fehler machen und als neue Methodendeklaration betrachtet. Es wäre schwierig, den Fehler an dieser Stelle zu erkennen.

nitin1706
quelle
1
Kapitalisierung ist wichtig, wir reden hier @Override, Alter :)
Datafiddler
9

@Overridebedeutet, dass Sie die Basisklassenmethode überschreiben. In Java6 bedeutet dies auch, dass Sie eine Methode über eine Schnittstelle implementieren. Es schützt Sie vor Tippfehlern, wenn Sie glauben, eine Methode zu überschreiben, aber etwas falsch geschrieben haben.

fastcodejava
quelle