extends и implements в Dart
Класс может расширить один родительский класс и при этом
реализовать один или несколько контрактов. Сначала пишут
extends с базовым классом, затем implements
с именами контрактов через запятую:
class Programmer {
List<String> getLangs();
void addLang(String lang);
}
class Employee {
String _name;
int _salary;
Employee(this._name, this._salary);
String getName() {
return _name;
}
int getSalary() {
return _salary;
}
}
Часть методов контракта уже есть в Employee.
Новый класс берет их через наследование и дописывает
только то, чего не хватает для контракта:
class Developer extends Employee implements Programmer {
List<String> _langs = [];
Developer(String name, int salary) : super(name, salary);
List<String> getLangs() {
return _langs;
}
void addLang(String lang) {
_langs.add(lang);
}
}
Тип параметра или поля можно указать как контракт. Тогда в метод передают любой объект класса, который этот контракт реализует:
class Team {
List<Programmer> _members = [];
void add(Programmer member) {
_members.add(member);
}
}
Тот же прием с полями и методами родителя и контрактом можно записать короче, если базовый класс уже задает нужное поведение:
class Note {
String title = "";
}
class Printable {
void show();
}
class Post extends Note implements Printable {
void show() {
print(title);
}
}
Сделайте класс Storable, в котором будет
метод save.
Сделайте класс Entity. Пусть
у класса будет поле title типа
String.
Сделайте класс Article, который будет
наследовать класс Entity и реализовывать
класс Storable.