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

StackOverflow https://stackoverflow.com/questions/1005898

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top