Я рад сообщить, что ответ теперь да!
Миксин - это на самом деле просто дельта между подклассом и суперклассом.Затем вы можете «смешать» эту дельту с другим классом.
Например, рассмотрите этот абстрактный класс:
abstract class Persistence {
void save(String filename) {
print('saving the object as ${toJson()}');
}
void load(String filename) {
print('loading from $filename');
}
Object toJson();
}
Затем вы можете смешать это с другими классами, таким образом избегая загрязнениядерево наследования.
abstract class Warrior extends Object with Persistence {
fight(Warrior other) {
// ...
}
}
class Ninja extends Warrior {
Map toJson() {
return {'throwing_stars': true};
}
}
class Zombie extends Warrior {
Map toJson() {
return {'eats_brains': true};
}
}
Ограничения на определения миксинов включают:
- Не должен объявлять конструктор
- Суперкласс - это Object
- Не содержитзвонки на супер
Некоторые дополнительные чтения: