Класс interface в Dart
Обычный class с публичными членами без тел другой
класс может и наследовать через extends, и реализовать
через implements. Иногда нужен тип, который только
реализуют, но не расширяют. Для этого в Dart есть форма
interface class:
interface class Printable {
void show();
}
class Post implements Printable {
String title = "";
void show() {
print(title);
}
}
Класс с модификатором interface нельзя указать
после extends. Наследование полей и готовых методов
от такого типа недоступно - остается только реализация
контракта через implements.
Проверка типа работает так же, как для обычного контракта.
Если объект создан классом-реализацией, выражение
is с именем interface class дает true:
Post post = Post();
print(post is Printable);
interface class подходит, когда тип нужен только
как внешний контракт: его реализуют разные классы,
но не делают общим родителем с кодом и полями.