Выбор ответа Middle Dart: классы и миксины обновлено

Dart: какой метод победит при нескольких миксинах

Вопрос

Что выведет C().hi()?

class Base { String hi() => 'base'; }
mixin A on Base { String hi() => 'A'; }
mixin B on Base { String hi() => 'B'; }
class C extends Base with A, B {}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: B. Миксины применяются слева направо: Base - Base+A - Base+A+B - C.

Варианты ответа

  1. A
  2. Bправильный ответ
  3. base
  4. Ошибка компиляции: конфликт одинаковых методов в миксинах

Разбор

Миксины применяются слева направо: Base -> Base+A -> Base+A+B -> C. Ближайший к C слой B, поэтому вызывается его метод. Конфликта нет: линеаризация однозначно определяет порядок. Если бы в B.hi был вызов super.hi(), он ушёл бы в A.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

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