Аннотация @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 одновременно обозначает переопределяемые (реализуемые) методы в потомках и предотвращает потенциальные ошибки, которые могли быть при определении метода с другой сигнатурой.

Зачем использовать аннотацию @Override