Введение в реализацию типа в Dart
Контракт типа задает, какие команды должен уметь объект, если класс его реализует. В объявлении перечисляют имена методов и геттеров без привязки к конкретным полям реализации.
Абстрактный родитель тоже может требовать реализации методов у потомков, но обычно хранит общее состояние и готовый код. Контракт описывает только поведение снаружи: «умеет рисоваться», «умеет считать площадь», «умеет сохраняться на диск».
В Dart нет отдельного слова для интерфейса. Контракт объявляют
обычным class с перечнем публичных членов без тел.
Экземпляр такого типа напрямую не создают - нужен класс,
который реализует все обязательные члены.
Другой класс подключает контракт словом implements
и сам пишет тело каждого публичного метода и геттера.
Термин «реализует» здесь уместнее, чем «наследует»: контракт
не подменяет родителя с полями, а навешивает на тип набор
обязанностей. Дальше раздел пройдет по шагам: реализация
implements, свои тела методов, несколько контрактов
у одного класса, сочетание extends и implements,
модификатор interface class и проверка типа оператором
is.