Что выведет код Senior Dart: классы и миксины обновлено
Dart: super в цепочке миксинов
Вопрос
Что выведет программа? По строке на каждый вывод.
class Base {
String name() => 'Base';
}
mixin A on Base {
@override
String name() => 'A>' + super.name();
}
mixin B on Base {
@override
String name() => 'B>' + super.name();
}
class C extends Base with A, B {
@override
String name() => 'C>' + super.name();
}
void main() {
print(C().name());
print((Base() as dynamic).name());
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: C>B>A>Base, Base. Линеаризация строит цепочку Base - Base+A - Base+A+B - C. super в C ведёт к слою B, super в B к A, super в A к Base.
Что выведет
C>B>A>Base
Base
Разбор
Линеаризация строит цепочку Base -> Base+A -> Base+A+B -> C. super в C ведёт к слою B, super в B к A, super в A к Base. Поэтому порядок C>B>A>Base. Обычный Base ничего не знает о миксинах.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Dart: порядок инициализации при наследовании
Следующий вопрос
Dart: sealed-класс и switch с деструктуризацией