extends и переопределение методов
Наследование и специализация поведения родителя
«extends и переопределение методов» — бесплатный урок Dart Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Совместное использование поведения
Если два класса имеют большую часть общего поведения, его можно написать один раз и переиспользовать. В Dart это называется наследованием, и такой подход избавляет от копирования и вставки. 🌱
Ключевое слово наследования
Для наследования укажите ключевое слово extends после имени класса. Новый класс становится дочерним и автоматически получает поля и методы родительского класса.
class Animal {}
class Dog extends Animal {}Родитель и потомок
Класс, от которого вы наследуетесь, называется суперклассом (родительским классом). Новый класс называется подклассом (дочерним классом). Dog — это Animal, но не каждый Animal является Dog.
Унаследованные члены
Дочерний класс сразу получает возможность использовать открытые методы родителя как свои собственные. Вы пишете поведение один раз, и каждый подкласс получает от него пользу.
class Animal {
void breathe() => print('breathing');
}
class Dog extends Animal {}
// Dog().breathe() worksДобавление нового поведения
Подкласс также может добавлять собственные методы поверх унаследованных. Дочерний класс остаётся Animal, но получает дополнительные возможности, которых не было у родителя.
class Dog extends Animal {
void bark() => print('Woof!');
}Переопределение метода
Иногда версия родительского класса не подходит дочернему. Переопределение позволяет подклассу заменить унаследованный метод собственной реализацией.
class Animal {
void speak() => print('...');
}
class Cat extends Animal {
void speak() => print('Meow');
}Маркер @override
Добавьте аннотацию @override над заменённым методом. Она сообщает анализатору, что нужно проверить наличие такого метода у родительского класса, и помогает рано обнаружить опечатки.
class Cat extends Animal {
@override
void speak() => print('Meow');
}Требуется та же сигнатура
При переопределении необходимо сохранить то же имя и совместимую сигнатуру. Если неосторожно изменить параметры или возвращаемый тип, Dart отклонит такой код.
Повторное использование версии родителя
Внутри переопределённого метода можно обратиться к исходной реализации через super, а затем добавить собственные шаги до или после неё. Так Вы расширяете поведение, а не отбрасываете его полностью.
@override
void speak() {
super.speak();
print('and purrs');
}Полиморфизм в действии
Сохраните дочерние объекты в переменной типа Animal и вызовите speak: каждый объект выполнит свою версию метода. Это и есть полиморфизм — главное преимущество переопределения.
Animal a = Cat();
a.speak(); // MeowОдиночное наследование
Класс Dart может наследоваться ровно от одного суперкласса, но не от двух. Чтобы делиться кодом между несвязанными деревьями классов, позже Вы сможете использовать примеси.
Быстрая проверка
Вы заменяете унаследованный метод в подклассе. Что он делает?
Повторение
Вы использовали extends, чтобы унаследовать члены родительского класса, добавили новые методы и переопределили другие с помощью @override. В этом заключается основа повторного использования классов. 🎉
Изучай Dart с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «extends и переопределение методов» бесплатный?
Да — полный текст урока «extends и переопределение методов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «extends и переопределение методов»?
Наследование и специализация поведения родителя Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «extends и переопределение методов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- extends и переопределение методов
- Вызов super и цепочка конструкторов
- Миксины с ключевым словом with
- Ограничения on и порядок миксинов