Проверка переопределения в Java
При переопределении метода родителя перед объявлением
в потомке ставят пометку @Override. Компилятор
проверит, что в базовом классе есть метод с подходящей
сигнатурой, и не примет случайную опечатку в имени.
Сеттер возраста в родителе и его переопределение в потомке выглядят так:
class Post {
protected int age = 0;
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
}
class Article extends Post {
@Override
public void setAge(int age) {
if (age >= 18 && age <= 65) {
this.age = age;
}
}
}
Если имя или параметры не совпадут с методом родителя,
код с @Override не скомпилируется. Без метки
компилятор мог бы принять такой метод за новый, а не
за переопределение:
class Post {
public void setAge(int age) {
}
}
class Article extends Post {
// @Override
public void setage(int age) {
// compiles as a new method, not an override
}
}
Тот же приём работает при реализации метода интерфейса: метка связывает объявление с контрактом интерфейса. Пример для простого счётчика просмотров:
interface ViewCounter {
int views();
}
class PageStats implements ViewCounter {
private int count = 0;
@Override
public int views() {
return count;
}
}
Переопределите в классе Employee
сеттер возраста из класса User
и пометьте метод аннотацией @Override.
Реализуйте интерфейс с одним методом label(),
возвращающим строку. Метод в классе должен быть
помечен @Override.