Ответ
Аннотация @Override используется для явного указания компилятору (и другим разработчикам), что метод в подклассе преднамеренно переопределяет метод из его суперкласса или реализует метод интерфейса.
Ключевые цели и преимущества:
-
Контроль на этапе компиляции: Компилятор проверяет, действительно ли существует метод с такой же сигнатурой (имя, параметры, тип возвращаемого значения) в родительском классе или интерфейсе. Если нет — возникает ошибка компиляции, которая помогает быстро обнаружить опечатки или изменение контракта в родительском классе.
class Animal { void makeSound() { } } class Cat extends Animal { @Override void makeSoud() { } // ОШИБКА КОМПИЛЯЦИИ: метод makeSoud() не найден в Animal } -
Улучшение читаемости кода: Явно показывает намерение разработчика и архитектурную связь между классами, облегчая понимание кода.
-
Соблюдение контракта: Гарантирует, что переопределение соответствует правилам полиморфизма.
Пример корректного использования:
abstract class Shape {
abstract double calculateArea();
}
class Circle extends Shape {
private double radius;
// Аннотация подтверждает, что мы правильно переопределяем абстрактный метод
@Override
double calculateArea() {
return Math.PI * radius * radius;
}
}
// @Override также используется при реализации методов интерфейса
class MyList implements List<String> {
@Override
public int size() { // Корректное переопределение метода из интерфейса List
return 0;
}
}
Использование @Override является хорошей практикой для всех переопределяемых методов.