Что такое @Override для Java?
Возможный дубликат:
Когда вы используете аннотацию Javas @Override и почему?
Есть ли другая причина для аннотирования метода с @Override, кроме того, чтобы проверить компилятор, что суперкласс имеет этот метод?
Ответы
Ответ 1
Как вы описали, @Override создает проверку времени компиляции, когда метод переопределяется. Это очень полезно, чтобы убедиться, что у вас нет глупой проблемы с подписью при попытке переопределить.
Например, я видел следующую ошибку:
public class Foo {
private String id;
public boolean equals(Foo f) { return id.equals(f.id);}
}
Этот класс компилируется как написанный, но добавление тега @Override к методу equals вызовет ошибку компиляции, поскольку она не отменяет метод equals для Object. Это простая ошибка, но она может уйти от глаз даже опытного разработчика.
Ответ 2
Это не только делает проверку компилятора - хотя этого было бы достаточно, чтобы сделать ее полезной; он также документирует намерение разработчика.
Например, если вы переопределяете метод, но не используете его нигде из самого типа, кто-то, входящий в код позже, может задаться вопросом, почему на земле это есть. Аннотации объясняют ее цель.
Ответ 3
Нет, вы в значительной степени прибивали его.
@Override
сообщает компилятору ваше намерение: если вы помечаете метод @Override
, вы должны переопределить что-то из суперкласса (или интерфейса, на Java 6). Хорошая среда IDE будет эффективно отмечать любой метод, который переопределяет метод без @Override
, поэтому комбинация из двух поможет гарантировать, что вы делаете то, что вы пытаетесь сделать.
Ответ 4
nope - за исключением того, что он также улучшает читаемость (то есть в дополнение к любому показателю, который использует IDE, он позволяет легко заметить, что метод переопределяет декларацию в суперклассе)