Что выведет код Senior Dart: классы и миксины обновлено

Dart: расширение и статический тип

Вопрос

Что выведет программа? По строке на каждый вывод.

class Cat {
  String speak() => 'мяу';
}

extension Loud on Object {
  String speak() => 'расширение';
}

extension Shout on Cat {
  String shout() => speak().toUpperCase();
}

void main() {
  final cat = Cat();
  Object obj = cat;
  print(cat.speak());
  print(obj.speak());
  print(cat.shout());
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: мяу, расширение, МЯУ. Член класса побеждает расширение, если он виден по статическому типу: у cat тип Cat, вызывается мяу.

Что выведет

мяу
расширение
МЯУ

Разбор

Член класса побеждает расширение, если он виден по статическому типу: у cat тип Cat, вызывается мяу. У obj статический тип Object, у него нет speak, поэтому работает расширение. Внутри Shout on Cat speak() снова метод класса.

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

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

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