Что такое @Override для Java? [дубликат]


Возможные Дубликаты:
когда вы используете аннотацию @Override Java и почему?

есть ли причина аннотировать метод с помощью @Override кроме того, чтобы компилятор проверил, что суперкласс имеет этот метод?

4 53

4 ответа:

как вы описываете, @Override создает проверку времени компиляции, что метод переопределяется. Это очень полезно, чтобы убедиться, что у вас нет глупый вопрос подписи при попытке переопределить.

например, я видел следующую ошибку:

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

этот класс компилируется как написано, но добавление тега @Override в метод equals приведет к ошибке компиляции, поскольку он не переопределяет метод equals на объекте. Это простая ошибка, но она может убежать глаз даже опытного разработчика

Это не только делает проверку компилятора - хотя этого было бы достаточно, чтобы сделать его полезным; он также документирует намерение разработчика.

нет, вы в значительной степени прибил его.

@Override сообщает компилятору свой намерение: если вы помечаете метод @Override, вы намеревались переопределить что-то из суперкласса (или интерфейса, в Java 6). Хорошая IDE поможет пометить любой метод, который переопределяет метод без @Override, Так что сочетание этих двух поможет гарантировать, что вы делаете то, что вы пытаетесь.

нет -- за исключением того, что он также улучшает читаемость (т. е. В дополнение к любому индикатору, который использует ваша IDE, он позволяет легко определить, что метод переопределяет объявление в суперклассе)