Абстрактные классы и методы
Определение того, что должны реализовать подклассы
«Абстрактные классы и методы» — бесплатный урок Dart Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Что означает abstract
Абстрактный класс — это схема, которую можно описать, но нельзя создать напрямую. Он предназначен для наследования, а не для самостоятельного создания экземпляров.
Объявление абстрактного класса
Добавьте ключевое слово abstract перед class. Так Вы сообщаете Dart, что класс незавершён и должен служить общей базой.
abstract class Shape {
double area();
}У абстрактных методов нет тела
Абстрактный метод объявляет имя и сигнатуру, но завершается точкой с запятой, оставляя фактическую работу каждому подклассу.
abstract class Shape {
double area(); // no body
}Его нельзя создать
Попытка написать Shape() приводит к ошибке компиляции. Dart отказывается это делать, потому что абстрактный класс незавершён и не содержит полноценной реализации.
var s = Shape(); // error: abstractПодклассы заполняют пропуски
Подкласс использует extends и обязан предоставить тело для каждого абстрактного метода, превращая схему в пригодную для использования реализацию.
class Circle extends Shape {
final double r;
Circle(this.r);
double area() => 3.14 * r * r;
}Допустимы и конкретные методы
Абстрактный класс может содержать полностью написанные конкретные методы. Подклассы наследуют их напрямую и реализуют только абстрактные методы.
abstract class Shape {
double area();
void describe() => print('Area is ' + area().toString());
}Поля в абстрактных классах
Абстрактные классы также могут содержать поля и конструкторы. Они выполняются при создании подкласса, поэтому общее состояние хранится в базовом классе.
abstract class Shape {
final String name;
Shape(this.name);
}Компилятор контролирует контракт
Если подкласс не реализует абстрактный метод, Dart сообщает об ошибке ещё до запуска кода. Контракт проверяется автоматически.
class Square extends Shape {} // error: area() missingЗачем нужны абстрактные классы
Они позволяют разным типам иметь общую структуру и гарантируют, что каждый из них предоставит собственное поведение. Вы один раз создаёте ясный контракт и используете его повсюду.
Абстрактные геттеры
Абстрактными можно оставить не только методы. Геттер без тела работает так же и должен быть определён в подклассах.
abstract class Shape {
String get label;
}Хранение абстрактных ссылок
Любой подкласс можно сохранить в переменной, типизированной как abstract-класс. Тип гарантирует наличие поведения, не указывая конкретный класс.
Shape s = Circle(2);
print(s.area());Быстрая проверка
Небольшой вопрос об абстрактных классах.
Повторение
Абстрактные классы — это схемы, от которых наследуются, а не экземпляры которых создают. У абстрактных методов нет тела, а конкретные подклассы обязаны их реализовать. Отличная работа! 🎯
Часто задаваемые вопросы
Урок «Абстрактные классы и методы» бесплатный?
Да — полный текст урока «Абстрактные классы и методы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Абстрактные классы и методы»?
Определение того, что должны реализовать подклассы Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Абстрактные классы и методы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Абстрактные классы и методы
- Неявные интерфейсы и implements
- Полиморфизм через общие типы
- Композиция вместо наследования