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