Введение в интерфейсы в Java
Интерфейс задаёт контракт: какие команды должен уметь объект, если класс его реализует. В интерфейсе перечисляют сигнатуры методов без привязки к полям конкретного класса.
Абстрактный класс тоже может требовать реализации методов у потомков, но обычно хранит общее состояние и готовый код. Интерфейс описывает поведение снаружи: «умеет публиковаться», «умеет сохранять черновик», «умеет показывать превью».
В Java интерфейс объявляют словом interface
вместо class. Экземпляр интерфейса создать
нельзя - нужен класс, который закроет все обязательные
члены контракта. Минимальный контракт выглядит так:
interface Publishable {
void publish();
}
Класс подключает интерфейс словом implements
и помечает реализацию аннотацией @Override.
Термин «реализует» здесь уместнее, чем «наследует»:
интерфейс не хранит данные сам по себе, а навешивает
на тип набор обязанностей. Пример реализации:
class Post implements Publishable {
@Override
public void publish() {
System.out.println("published");
}
}
Один класс может реализовать несколько интерфейсов,
а сами интерфейсы могут наследовать друг друга через
extends. В интерфейсе также допустимы константы,
методы с телом default и статические методы.
Дальше раздел пройдёт по шагам: объявление интерфейса,
реализация в классе, методы и константы, default
и static, несколько интерфейсов, наследование
контрактов и проверка типа оператором instanceof.