Вызов super и цепочка конструкторов
Обращение к родителю во время создания объекта
«Вызов super и цепочка конструкторов» — бесплатный урок Dart Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Порядок создания
При создании подкласса сначала необходимо настроить его родительский класс. Dart гарантирует, что конструктор родителя выполнится до начала тела дочернего класса. 🏗️
Знакомство с super
Ключевое слово super обозначает родительскую часть Вашего объекта. С его помощью из дочернего класса можно обратиться к конструктору, методам и полям родителя.
Неявный super()
Если Вы ничего не напишете, Dart сам вызовет конструктор родителя без аргументов. Именно этот невидимый вызов super() позволяет родителям всегда инициализироваться первыми.
class Animal { Animal() => print('Animal'); }
class Dog extends Animal { Dog(); }Явный вызов super
Если родителю нужны аргументы, вызовите super(...) в списке инициализации конструктора после двоеточия. Так значения передаются вверх по цепочке.
class Dog extends Animal {
Dog(String name) : super(name);
}Где размещается super
Вызов super находится в списке инициализации, а не в теле конструктора. К моменту выполнения тела родитель уже полностью создан.
Dog(String name, this.breed) : super(name);Параметры super
Современный Dart позволяет передавать аргументы родителю напрямую с помощью super.field. Это избавляет от повторяющегося шаблонного кода в списке параметров.
class Dog extends Animal {
Dog(super.name);
}Вызов методов super
Внутри переопределённого метода super.method() запускает исходную версию метода родителя. Так Вы расширяете поведение, а не заменяете его полностью.
@override
void speak() {
super.speak();
print('extra');
}Цепочка вверх по дереву
При наличии нескольких уровней наследования каждый конструктор вызывает конструктор своего родителя. Эта цепочка доходит до вершины, а затем тела классов выполняются обратно вниз до Вашего класса.
Порядок инициализации
Полный порядок таков: сначала список инициализации и super, затем тело родителя и после него тело дочернего класса. Поля готовы к работе с final ещё до выполнения любого тела.
Когда родителю нужны аргументы
Если у родителя нет конструктора по умолчанию, Вы обязаны вызвать super с правильными аргументами. Пропустите этот вызов — и Dart сообщит об ошибке компиляции.
Перенаправление с помощью this
Внутри одного класса конструктор может вызвать другой с помощью this(...). Это цепочка между соседними конструкторами, отличная от обращения вверх через super.
Point.origin() : this(0, 0);Быстрая проверка
Подумайте, где должен находиться вызов конструктора родителя.
Повторение
Вы вызывали super, чтобы запускать конструкторы и методы родителей, передавали значения с помощью параметров super и перенаправляли вызовы между соседними конструкторами с помощью this. 🔗
Часто задаваемые вопросы
Урок «Вызов super и цепочка конструкторов» бесплатный?
Да — полный текст урока «Вызов super и цепочка конструкторов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Вызов super и цепочка конструкторов»?
Обращение к родителю во время создания объекта Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Вызов super и цепочка конструкторов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- extends и переопределение методов
- Вызов super и цепочка конструкторов
- Миксины с ключевым словом with
- Ограничения on и порядок миксинов