2011-01-10 10 views
7

Dies ist eine sehr naiveish Frage, aber hier geht:Zweck der Überschreibung

Eine überschriebene Methode von einer Basisklasse bedeutet, dass auf die Unterklasse ruft das abgeleitet wird, überschriebenen Methode aufrufen, richtig?

Wenn also keine Override-Annotation vorhanden ist, wird die Methode in der Basisklasse aufgerufen. Die Override-Methode dient also lediglich dazu, die Absicht zu dokumentieren - rufen Sie eine Version einer Methode gegenüber der anderen auf.

Ist das der Fall?

Dies führt mich zu folgenden Frage:

Was ist der Unterschied zwischen einer abstrakten Klasse ist, die 5-6 Klassen ableiten können aber die in den abgeleiteten Klassen geerbten Methoden sind nicht außer Kraft gesetzt, und eine Klasse (Static oder nicht irrelevant), von diesen 5-6 Klassen verwendet?

+0

'override' ist nur eine Anmerkung. Es funktioniert auf die gleiche Weise, ob die Anmerkung vorhanden ist oder nicht. – Gabe

+0

Dies wird ausführlich in http://stackoverflow.com/q/94361/697630 –

Antwort

10

Die @Override Anmerkung NUR sollen Fehler bei der Kompilierung fangen. Es wirkt sich nicht auf das Override-Verhalten zur Laufzeit aus. Die Idee ist, dass Sie dem Compiler die Möglichkeit geben, Sie darüber zu informieren, dass Ihr Methodenname oder Ihre Signatur falsch ist. So

+6

beantwortet. Es ist besonders nützlich, wenn Sie Codeänderungen im Laufe der Zeit betrachten. Wenn Ihre Unterklasse eine Methode der Basisklasse überschreibt, aber später jemand diese Methodensignatur in der Basisklasse ändert, überschreibt Ihre Unterklasse nichts mehr, was wahrscheinlich falsch ist. Der @Override teilt dem Compiler mit, dass erwartet wird, dass die Methode etwas überschreibt. Daher stolpert es bei der Erstellung, sodass Sie die Situation untersuchen und korrigieren können. Betrachten Sie es als eine Build-Time-Behauptung. –

+0

Gutes Beispiel, macht wirklich Sinn, danke! – dotnetdev

0

Verwendung von abstract ist ein Architekturentwurf, um sicherzustellen, dass Benutzer entweder eine abstrakte Methode implementieren müssen (deklariert, aber nicht implementiert in der Basisklasse) oder dass sie alle Zugriff auf dieselben Basismethoden und Daten haben letzteres Beispiel gab man).

0

, wenn es keine Überschreibung Anmerkung ist, wobei das Verfahren in der Basis Klasse aufgerufen.

Nein. Die überschreibende Methode in der abgeleiteten Klasse wird immer aufgerufen.

So wird die Überschreibung Methode rein Dokument die Absicht dienen - eine Version einer Methode über die andere nennen.

Ist das der Fall?

Nein. Wie bei den anderen Antworten wird der Compiler angewiesen, darauf zu bestehen, dass etwas zu überschreiben ist.