2009-02-18 15 views

Odpowiedz

47

Jak można opisać, @Override tworzy kontrolę kompilacji, że metoda jest nadpisywana. Jest to bardzo przydatne, aby upewnić się, że nie masz głupiego problemu z podpisami, gdy próbujesz przesłonić.

Na przykład, widziałem następujący błąd:

public class Foo { 
    private String id; 
    public boolean equals(Foo f) { return id.equals(f.id);} 
} 

Ta klasa kompiluje jak napisane, ale dodając tag @Override do metody Równa spowoduje błąd kompilacji, gdyż nie przesłonić metodę equals na obiekcie. Jest to prosty błąd, ale może uciec nawet przed doświadczonym programistą.

+0

@AngryDuck to dlatego, że używasz 3 znaków zapytania. – Det

21

Sprawdza nie tylko kompilator, ale może to być przydatne; Dokumentuje również zamiary programisty.

Na przykład, jeśli nadpisujesz metodę, ale nie używasz jej nigdzie w stosunku do samego typu, ktoś przychodzący do kodu później może się zastanawiać, dlaczego na ziemi jest. Adnotacja wyjaśnia jego cel.

+2

Zastanawiam się, jakie były punkty reputacji, gdy odpowiedziałeś na to pytanie. –

+0

@OmarTariq: Podejrzewam, że około 50K podejrzewam. –

+0

@OmarTariq Tak czynię :) Skomentowałem twój komentarz ... –

2

nope - oprócz tego, że również poprawia czytelność (tj oprócz cokolwiek wskaźnik IDE używa, to sprawia, że ​​łatwo zauważyć, że metoda zastępuje oświadczenie nadklasy)

10

Nie, ty go prawie przygwoździłeś.

@Override informuje kompilator swój intencją: jeśli oznaczyć metodę @Override, zamierzałeś przesłonić coś z nadklasy (lub interfejsu w Javie 6). Dobry IDE będzie pomocny w oznaczeniu dowolnej metody, która zastąpi metodę bez numeru @Override, więc połączenie tych dwóch pomoże upewnić się, że robisz to, co próbujesz.