2010-11-15 15 views
8

Powiel możliwe:
What's “@Override” there for in java?Java - do czego służy "@Override"?

Nigdy nie umieścić "@Override" przed metody aż do teraz. Widzę z nim kilka przykładów kodu, ale nie rozumiem jego użyteczności. Chciałbym wyjaśnienia.

Dziękujemy,

JDelage

+0

Duplikat [What's "@Override" tam w java?] (Http://stackoverflow.com/questions/2489974/whats-override-there-for-in-java) –

+0

Aby wyjaśnić, mówisz " @Override before a class "- masz na myśli metodę? A może rzeczywiście odwołujesz się do adnotacji @Override na zajęciach? –

+0

Również duplikat http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why –

Odpowiedz

6

Po pierwsze, nie można opisywać na klasę z @Override. Ta adnotacja wskazuje, że deklaracja metody ma na celu zastąpienie deklaracji metody w nadklasie.

Nie muszę opisywać przesłanianie metod ale jeśli używasz tego adnotację i swój uwagami metodę nie nadpisanie metody nadklasy, wówczas kompilator wygeneruje komunikat o błędzie.

1

Jest to konwencjonalny komentarz. Niektóre kompilatory upewnij się, że funkcja następnie @Override jest faktycznie przesłanianie ... tylko failsafe

8

Wskazuje, że deklaracja metoda ma zastąpić deklarację sposobu w nadrzędnej. Jeśli metoda jest opisana za pomocą tego typu adnotacji, ale nie zastępuje metody nadklasy, kompilatory muszą wygenerować komunikat o błędzie.

http://download.oracle.com/javase/6/docs/api/java/lang/Override.html

Sprawa chciałbym wyjaśnić jej stosowanie jest, gdy przesłanianie equals.

Ten błąd będzie bo equals oczekuje parametr Object:

public class Foo{ 

    @Override 
    public boolean equals(Foo f){ 
     return true; 
    } 
} 
+0

... Chociaż myślę, że można go pominąć w metodach, które naprawdę są przesłonięciami. Myślę, że spowoduje to ostrzeżenie w * niektórych * środowiskach, ale nie błąd. – FrustratedWithFormsDesigner

+1

To będzie błąd, jeśli wstawisz '@ Override' na metodę, która niczego nie zastąpi. To zdecydowanie nie jest wymagane, ale pomaga kompilatorowi pomóc. – Jeremy

2

To tam, aby wyrazić, że można oczekiwać, aby być metoda przesłanianie metody nadklasy. Przydaje się, gdy popełnisz błąd, przeliterowując nazwę metody lub podając jej nieprawidłowe parametry, aby nie zastąpić tego, co uważasz za nadrzędne.

5

Najlepszy przykład - przesłanianie equals().

Jeśli piszesz klasę tak:

public class Foo 
{ 
    public String bar; 

    public boolean equals(Foo other) 
    { 
     return this.bar.equals(other.bar); 
    } 
} 

wtedy masz przeciążony metody equals, zamiast przesłanianie Object.equals jak miało.

Jeśli zanotujesz metodę równą z @Override, kompilator poda błąd stwierdzający (poprawnie), że nie nadpisałeś metody nadklasy.

W języku Java 6 można użyć tego również do implementowania metod interfejsu - jest to przydatne, gdy dodajesz metodę tylko do klasy, aby zaspokoić pewien interfejs, a zatem kompilator może sprawdzić, czy jest wymagany i ostrzega Cię o tym. zmiana interfejsu.

Podobnie jak w przypadku wszystkich adnotacji, jest to skutecznie programowy komentarz, ale w przypadku, gdy kompilator sprawdza, czy twoje założenia są (nadal) prawidłowe, jest bardzo przydatny.