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