Junior
Aký je rozdiel medzi kľúčovými slovami Abstract a late v Dart?
sobes.tech AI
Odpoveď od AI
Abstract sa používa na vytváranie abstraktných tried, ktoré nie je možné priamo inštancovať. Abstraktná trieda môže obsahovať implementované aj abstraktné (bez implementácie) metódy. Abstraktné metódy musia byť implementované v neabstraktných podtriedach.
late sa používa na oneskorenú inicializáciu premenných. Premenná označená ako late bude zaručene inicializovaná pred svojím prvým použitím. Ak je premenná deklarovaná ako late a nie je inicializovaná pred prvým prístupom k nej, dôjde k chybe za behu. Je to užitočné na inicializáciu premenných, ktorých hodnoty závisia od iných premenných alebo logiky vykonávanej po deklarácii.
| Vlastnosť | Abstract | late |
|---|---|---|
| Použitie na | Triedach | Premenných |
| Cieľ | Definuje kontrakt, šablón | Oneskoorená inicializácia |
| Inštancovanie | Nie je možné priamo | Je možné |
| Povinnosť | Implementácie metód v podtriedach (pre abstraktné metódy) | Inicializácia pred prvým použitím |
Príklad abstract:
// Definícia abstraktnej triedy
abstract class Shape {
// Abstraktná metóda
double getArea();
// Implementovaná metóda
void printName() {
print("Toto je tvar");
}
}
// Implementácia abstraktnej triedy
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Nie je možné vytvoriť inštanciu Shape:
// var shape = Shape(); // Chyba
Príklad late:
// Deklarácia premennej s oneskorenou inicializáciou
late String name;
void setupName() {
// Inicializácia premennej pred prvým použitím
name = "Flutter Developer";
}
void greet() {
// Prvé použitie premennej name po inicializácii
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Vypíše "Hello, Flutter Developer!"
// Ak by bol greet() volaný pred setupName(), nastala by chyba za behu
// greet(); // Chyba, ak by name nebola inicializovaná
}