Java:Должен ли я добавлять аннотацию @Override при реализации абстрактных методов?
-
05-07-2019 - |
Вопрос
При переопределении невиртуального метода в Java рекомендуется использовать аннотацию @Override, но что, если я реализую абстрактный метод?Должен ли я тогда также использовать @Override?
Решение
В этом случае я предпочитаю использовать @Override
, чтобы метод помечался в подклассах при изменении суперкласса (либо удалении метода полностью, либо изменении его сигнатуры и т. д.). ). р>
Единственное реальное различие заключается в том, что без аннотации, если метод в суперклассе / интерфейсе изменяется или удаляется, рассматриваемая реализация просто становится "нормальной". метод этого класса. Таким образом, вы должны добавить аннотацию, если вы реализуете метод исключительно для выполнения контракта; и вам, вероятно, не следует добавлять его, если метод имеет смысл в вашем классе, независимо от каких-либо реализованных интерфейсов или унаследованных абстрактных методов.
Другие советы
Да, опять же, это говорит компилятору: "Я действительно хочу переопределить метод здесь. Если нет соответствующего метода для переопределения, я допустил ошибку и хочу сообщить об этом! & Quot;
Лично я считаю, что жаль, что это всего лишь аннотация, а не часть языка (как это происходит в C #), но это, конечно, преимущество задним числом.
ДА.Это рекомендованная практика Джошуа Блоха по эффективной Java.
На самом деле Джошуа Блох в последнем абзаце страницы 178 в Effective Java (2nd Ed.) говорит, что для методов конкретных классов, которые переопределяют абстрактные методы, не обязательно использовать Override
, потому что компилятор все равно выдаст ошибку. Однако «это не вредно».
Я бы порекомендовал выбрать стратегию и придерживаться ее последовательно.