Наследование интерфейсов в Java
Интерфейсы наследуют друг друга ключевым словом extends,
а не implements. Дочерний контракт включает все методы
и константы родителя плюс свои. Родителей у интерфейса может
быть несколько - их перечисляют через запятую. Пример цепочки:
interface Figure {
double area();
double perimeter();
}
interface Rectangle extends Figure {
double getWidth();
double getHeight();
}
Класс, реализующий Rectangle, обязан закрыть
и методы Figure, и требования Rectangle.
Повторно объявлять методы родительского интерфейса
в дочернем не нужно - они уже входят в контракт:
class SimpleRect implements Rectangle {
private final double width;
private final double height;
public SimpleRect(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getWidth() {
return width;
}
@Override
public double getHeight() {
return height;
}
@Override
public double area() {
return width * height;
}
@Override
public double perimeter() {
return 2 * (width + height);
}
}
Цепочка интерфейсов помогает не дублировать одинаковые методы в разных контрактах. Общую часть выносят в базовый интерфейс, частные детали - в наследников.
Сделайте интерфейс User с методами getName,
setName, getAge и setAge.
Сделайте интерфейс Employee, наследующий User
и добавляющий getSalary и setSalary.
Сделайте класс OfficeEmployee, реализующий
интерфейс Employee.