Что выведет код 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 ошибок.

Термины по теме