Аннотация @Override появилась в Java 5. С помощью этой аннотации маркируются методы, которые переопределяются в наследниках.
Как использовать аннотацию @Override
Рассмотрим стандартный интерфейс AutoCloseable:
public interface AutoCloseable { void close() throws Exception; }
Как вы видите, в этом интерфейсе определён один метод close.
Теперь создадим собственный класс Resource и укажем, что он реализует интерфейс AutoCloseable:
public class Resource implements AutoCloseable { }
Теперь для того, чтобы код компилировался, нам потребуется определить метод close. Если вы сгенерируете заглушку метода средствами вашей IDE, методу автоматически будет установлена аннотация @Override:
public class Resource implements AutoCloseable { @Override public void close() throws Exception { // код } }
Функция 1: маркировка переопределённых методов
Как вы видите, аннотация означает, что метод close был переопределён. Это даёт дополнительную подсказку программисту о том, что метод был объявлен в каком-то предке данного класса.
Функция 2: защита от переопределения не того метода
Вторая, не менее важная функция аннотации @Override это защита от переопределения не того метода по ошибке программиста.
В том же классе Resource переименуем метод close() на close2():
public class Resource implements AutoCloseable { @Override public void close2() throws Exception { // код } }
Ваша IDE подсветит строку с аннотацией @Override, сигнализируя вам о том, что метода close2() нет в предках класса Resource. Таким образом, компилятор предупреждает нас о потенциальной ошибке, которая могла произойти по вине программиста.
Заключение
Аннотация @Override одновременно обозначает переопределяемые (реализуемые) методы в потомках и предотвращает потенциальные ошибки, которые могли быть при определении метода с другой сигнатурой.