Что выведет код Middle Dart: классы и миксины обновлено
Dart: порядок инициализации при наследовании
Вопрос
Что выведет программа? По строке на каждый вывод.
class Parent {
Parent() {
print('тело Parent');
}
}
class Child extends Parent {
final int x;
Child(int v)
: x = log('поле x', v),
super() {
print('тело Child $x');
}
}
int log(String msg, int v) {
print(msg);
return v;
}
void main() {
Child(5);
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: поле x, тело Parent, тело Child 5. Сначала выполняется список инициализации Child (поле x), затем конструктор родителя целиком, и только потом тело конструктора Child.
Что выведет
поле x
тело Parent
тело Child 5
Разбор
Сначала выполняется список инициализации Child (поле x), затем конструктор родителя целиком, и только потом тело конструктора Child. Поэтому в теле родителя поля наследника уже инициализированы списком, а тело наследника выполняется последним.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.