Выбор ответа 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.
Варианты ответа
ABправильный ответbase- Ошибка компиляции: конфликт одинаковых методов в миксинах
Разбор
Миксины применяются слева направо: Base -> Base+A -> Base+A+B -> C. Ближайший к C слой B, поэтому вызывается его метод. Конфликта нет: линеаризация однозначно определяет порядок. Если бы в B.hi был вызов super.hi(), он ушёл бы в A.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.