Методы с телом в интерфейсе Java
Метод интерфейса может иметь тело, если перед сигнатурой
стоит ключевое слово default. Такая реализация
доступна во всех классах, которые подключают интерфейс,
пока они сами не переопределят метод. Пример интерфейса:
interface Clickable {
void click();
default void showHint() {
System.out.println("clickable");
}
}
class Button implements Clickable {
@Override
public void click() {
System.out.println("clicked");
}
}
Класс обязан реализовать только абстрактные методы.
Метод showHint можно вызывать сразу у объекта
Button, не дублируя код:
Button button = new Button();
button.click();
button.showHint();
При необходимости поведение по умолчанию заменяют своим
@Override. Это удобно, когда у большинства
реализаций один и тот же код, а у отдельных типов - особый:
class SilentButton implements Clickable {
@Override
public void click() {
System.out.println("silent click");
}
@Override
public void showHint() {
System.out.println("no hint");
}
}
Сделайте интерфейс Resettable с абстрактным
методом reset и default-методом
describeReset, который выводит строку
"reset available".
Сделайте класс Timer, реализующий Resettable.
Не переопределяйте describeReset.