Класс и интерфейс вместе в Java
Класс может расширять один родительский класс и при этом
реализовать один или несколько интерфейсов. Сначала пишут
extends и имя класса, затем implements
и список интерфейсов через запятую. Заготовка типов:
interface Programmer {
java.util.List<String> getLangs();
void addLang(String lang);
}
class Article {
private String title;
private int views;
public Article(String title, int views) {
this.title = title;
this.views = views;
}
public String getTitle() {
return title;
}
public int getViews() {
return views;
}
}
Часть методов контракта уже есть в Article.
Новый класс берёт их через наследование и дописывает
только то, чего не хватает для интерфейса:
class Developer extends Article implements Programmer {
private final java.util.List<String> langs =
new java.util.ArrayList<>();
public Developer(String title, int views) {
super(title, views);
}
@Override
public java.util.List<String> getLangs() {
return langs;
}
@Override
public void addLang(String lang) {
langs.add(lang);
}
}
Тип параметра или поля можно указать как интерфейс. Тогда в метод передают любой объект класса, который этот интерфейс реализует:
class Team {
private final java.util.List<Programmer> members =
new java.util.ArrayList<>();
public void add(Programmer member) {
members.add(member);
}
}
Сделайте интерфейс Storable с методом save.
Сделайте класс Entity с полем title
типа String.
Сделайте класс Employee, наследующий Entity
и реализующий Storable.