Junior
Фарқи байни калимави калидии Abstract ва late дар Dart чист?
sobes.tech AI
Ҷавоб аз AI
Abstract используется для создания абстрактных классов, которые нельзя напрямую инстанцировать. Абстрактный класс может содержать реализованные и абстрактные (без реализации) методы. Абстрактные методы должны быть реализованы в подклассах.
late используется для отложенной инициализации переменных. Переменная, помеченная как late, гарантированно будет инициализирована перед первым использованием. Если переменная объявлена как late и не инициализирована до первого обращения, произойдет ошибка выполнения. Это полезно для инициализации переменных, зависящих от других переменных или логики.
| Свойство | Abstract | late |
|---|---|---|
| Применяется к | Классам | Переменным |
| Цель | Определяет контракт, шаблон | Отложенная инициализация |
| Инстанцирование | Невозможно напрямую | Возможно |
| Обязательность | Реализации методов в подклассах | Инициализации перед первым использованием |
Пример abstract:
// Определение абстрактного класса
abstract class Shape {
// Абстрактный метод
double getArea();
// Реализованный метод
void printName() {
print("Это фигура");
}
}
// Реализация абстрактного класса
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Нельзя создать экземпляр Shape:
// var shape = Shape(); // Ошибка
Пример late:
// Декларация переменной с отложенной инициализацией
late String name;
void setupName() {
// Инициализация переменной до первого использования
name = "Flutter Developer";
}
void greet() {
// Первое использование переменной name после инициализации
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Выведет "Hello, Flutter Developer!"
// Если бы greet() был вызван до setupName(), произошла бы ошибка времени выполнения
// greet(); // Ошибка, если бы name не был инициализирован
}