Подтвердить что ты не робот

Должен ли я добавить аннотацию @Override при реализации абстрактных методов в Java?

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

4b9b3361

Ответ 1

Я предпочитаю использовать @Override в этом случае, так что метод будет помечен в подклассах, если суперкласс изменит (вообще удалив метод или изменив его подпись и т.д.).

Единственное реальное различие заключается в том, что без аннотации, если метод в суперклассе/интерфейсе изменяется или удаляется, рассматриваемая реализация просто становится "нормальным" методом этого класса. Таким образом, вы должны добавить аннотацию, если вы реализуете метод исключительно для выполнения контракта; и вы, вероятно, не должны добавлять его, если метод имеет смысл в вашем классе, независимо от каких-либо реализованных интерфейсов или унаследованных абстрактных методов.

Ответ 2

Да, опять-таки, он сообщает компилятору: "Я действительно хочу переопределить метод здесь. Если нет соответствующего метода для переопределения, я допустил ошибку и хочу, чтобы об этом говорили!"

Лично я считаю, что жаль, что это всего лишь аннотация, а не часть языка (как в С#), но, конечно же, преимущество задним числом.

Ответ 3

Да. Рекомендуется практиковать Джошуа Блох в "Эффективной Java".

Ответ 4

На самом деле, Джошуа Блох в заключительном параграфе на стр. 178 в "Эффективной Java" (2-е изд.) говорит, что это не важно для методов конкретных классов, которые переопределяют абстрактные методы для использования аннотации Override, потому что компилятор даст ошибка в любом случае. Однако "это не вредно".

Я бы рекомендовал выбрать стратегию и придерживаться ее последовательно.