@Override
Помечает метод, который переопределяет метод родителя или интерфейса. Компилятор проверяет, что это действительно так.
Доступно с: Java 5
Синтаксис
@Target(METHOD) @Retention(SOURCE) public @interface OverrideПримеры
Переопределение метода родителя:
class Animal {
String sound() {
return "...";
}
}
class Cat extends Animal {
@Override
String sound() {
return "Meow";
}
}
void main() {
Animal pet = new Cat();
IO.println(pet.sound());
}Результат:
MeowОпечатка в имени: без аннотации появился бы новый метод, а с ней — ошибка компиляции:
class Animal {
String sound() {
return "...";
}
}
class Cat extends Animal {
@Override
String sond() {
return "Meow";
}
}
void main() {
IO.println(new Cat().sound());
}Результат:
Main.java:8: error: method does not override or implement a method from a supertypeПримечания
Аннотация необязательна, но её ставят всегда: она защищает от опечаток и от неверной сигнатуры. Классическая ошибка — equals(Cat other) вместо equals(Object other): это перегрузка, а не переопределение, и @Override сразу её поймает. Аннотация работает и для методов интерфейсов, и для toString(), hashCode() из Object. В скомпилированный класс она не попадает.
См. также
- extends — Объявляет наследование: класс получает поля и методы родителя.
- implements — Указывает интерфейсы, которые реализует класс.
- Object.toString() — Возвращает текстовое представление объекта; вызывается при выводе и сложении со строкой.
- Object.equals() — Сравнивает объекты по смыслу. По умолчанию работает как ==, поэтому в своих классах его переопределяют.
В учебнике
- Аннотации — Аннотации в Java — @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings, объявление своей аннотации, @Retention, @Target и чтение аннотаций во время работы программы.