Junior
Dartта Abstract жана late ачкыч сөздөрүнүн айырмасы эмнеде?
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() {
// Биринчи колдонуу
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Чыгаруу "Hello, Flutter Developer!"
// Эгер greet() алдын ала чакырылса, ката болот
// greet(); // Ката, эгер name инициализацияланбаса
}