498 Stimmen

Wann verwenden Sie die @Override-Anmerkung von Java und warum?

Was sind die besten Praktiken für die Verwendung von Javas @Override Anmerkung und warum?

Es scheint, als wäre es übertrieben, jede einzelne überschriebene Methode mit dem @Override Bemerkung. Gibt es bestimmte Programmiersituationen, die die Verwendung der @Override und andere, die niemals die @Override ?

515voto

Dave L. Punkte 42559

Verwenden Sie sie jedes Mal, wenn Sie eine Methode überschreiben, um zwei Vorteile zu erzielen. Tun Sie es, damit Sie die Compiler-Prüfung nutzen können, um sicherzustellen, dass Sie tatsächlich eine Methode überschreiben, wenn Sie denken, dass Sie es tun. Wenn Sie einen häufigen Fehler machen, indem Sie den Namen einer Methode falsch schreiben oder die Parameter nicht richtig zuordnen, werden Sie gewarnt, dass Sie die Methode nicht so überschreiben, wie Sie es glauben. Zweitens wird Ihr Code dadurch leichter verständlich, weil es offensichtlicher ist, wenn Methoden überschrieben werden.

Zusätzlich kann man in Java 1.6 damit markieren, wenn eine Methode eine Schnittstelle für den gleichen Nutzen implementiert. Ich denke, es wäre besser, eine separate Annotation zu haben (wie @Implements ), aber es ist besser als nichts.

110voto

jon Punkte 2490

Ich denke, es ist am nützlichsten als Kompilierzeit-Erinnerung, dass die Absicht der Methode ist, eine übergeordnete Methode zu überschreiben. Als Beispiel:

protected boolean displaySensitiveInformation() {
  return false;
}

Sie werden oft etwas wie die obige Methode sehen, die eine Methode in der Basisklasse außer Kraft setzt. Dies ist ein wichtiges Implementierungsdetail dieser Klasse - wir wollen nicht, dass sensible Informationen angezeigt werden.

Angenommen, diese Methode wird in der übergeordneten Klasse geändert in

protected boolean displaySensitiveInformation(Context context) {
  return true;
}

Diese Änderung führt zu keinen Kompilierzeitfehlern oder Warnungen - aber sie ändert das beabsichtigte Verhalten der Unterklasse vollständig.

Um Ihre Frage zu beantworten: Sie sollten die @Override-Annotation verwenden, wenn das Fehlen einer Methode mit der gleichen Signatur in einer Oberklasse auf einen Fehler hindeutet.

46voto

Bill K Punkte 61074

Es gibt hier viele gute Antworten, daher möchte ich eine andere Sichtweise anbieten...

Bei der Codierung gibt es keinen Overkill. Es kostet Sie nichts, @override einzugeben, aber die Einsparungen können immens sein, wenn Sie einen Methodennamen falsch geschrieben haben oder die Signatur leicht falsch ist.

Betrachten Sie es einmal so: In der Zeit, in der Sie hierher navigiert sind und diesen Beitrag getippt haben, haben Sie mehr Zeit verbraucht, als Sie für den Rest Ihres Lebens mit der Eingabe von @override verbringen werden; aber ein Fehler, der dadurch vermieden wird, kann Ihnen Stunden sparen.

Java tut alles in seiner Macht Stehende, um sicherzustellen, dass Sie beim Editieren/Kompilieren keine Fehler gemacht haben. Dies ist ein praktisch kostenloser Weg, um eine ganze Klasse von Fehlern zu beheben, die auf keine andere Weise außerhalb umfassender Tests zu vermeiden sind.

Könnten Sie sich einen besseren Mechanismus in Java ausdenken, der sicherstellt, dass der Benutzer, der eine Methode außer Kraft setzen wollte, dies auch tatsächlich getan hat?

Ein weiterer netter Effekt ist, dass, wenn Sie die Annotation nicht bereitstellen, Sie zur Kompilierungszeit gewarnt werden, dass Sie versehentlich eine übergeordnete Methode überschreiben - etwas, das von Bedeutung sein könnte, wenn Sie dies nicht beabsichtigen.

22voto

jjnguy Punkte 132790

Ich benutze immer das Etikett. Es ist ein einfaches Compile-Time-Flag, um kleine Fehler abzufangen, die ich vielleicht mache.

Es wird Dinge auffangen wie tostring() anstelle von toString()

Die kleinen Dinge helfen bei großen Projekten.

18voto

toluju Punkte 4027

Die Verwendung des @Override Annotation dient als Kompilierzeitschutz gegen einen häufigen Programmierfehler. Es wird ein Kompilierungsfehler ausgelöst, wenn Sie die Annotation auf eine Methode anwenden, die nicht tatsächlich die Methode der Oberklasse überschreibt.

Der häufigste Fall, in dem dies nützlich ist, ist, wenn Sie eine Methode in der Basisklasse ändern, um eine andere Parameterliste zu erhalten. Eine Methode in einer Unterklasse, die früher die Methode der Oberklasse überschrieben hat, wird dies aufgrund der geänderten Methodensignatur nicht mehr tun. Dies kann manchmal zu seltsamem und unerwartetem Verhalten führen, insbesondere wenn es um komplexe Vererbungsstrukturen geht. Die @Override Anmerkung schützt vor diesem Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X