Junior
Mis vahe on võtmesõnadel Abstract ja late Dartis?
sobes.tech AI
Vastus AI-lt
Abstract kasutatakse abstraktsete klasside loomisel, mida ei saa otse instantsida. Abstraktil klassil võivad olla nii realiseeritud kui ka abstraktsed (ilma realiseerimiseta) meetodid. Abstraktsed meetodid peavad olema realiseeritud alamklassides.
late kasutatakse hilinenud initsialiseerimiseks. late märgitud muutuja on garanteeritult initsialiseeritud enne selle esimest kasutamist. Kui muutuja on märgitud kui late ja see ei ole enne esimest kasutamist initsialiseeritud, tekib jooksuaegne viga. See on kasulik muutujate initsialiseerimisel, mille väärtused sõltuvad teistest muutujatest või loogikast, mis toimub pärast deklaratsiooni.
| Omadus | Abstract | late |
|---|---|---|
| Rakendamine | Klassidele | Muutujatele |
| Eesmärk | Leping, mall | Hilinenud initsialiseerimine |
| Instantsi loomine | Ei ole võimalik otse | Võimalik |
| Kohustuslik | Meetodite realiseerimine alamklassides | Initsialiseerimine enne esimest kasutust |
Näide abstract:
// Abstraktse klassi defineerimine
abstract class Shape {
// Abstraktne meetod
double getArea();
// Realiseeritud meetod
void printName() {
print("See on kuju");
}
}
// Abstraktse klassi realiseerimine
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Ei saa luua Shape eksemplari:
// var shape = Shape(); // Viga
Näide late:
// Hilinenud initsialiseerimisega muutuja defineerimine
late String name;
void setupName() {
// Initsialiseerimine enne esimest kasutamist
name = "Flutter Developer";
}
void greet() {
// Esimene kasutamine pärast initsialiseerimist
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Väljund "Hello, Flutter Developer!"
// Kui greet() kutsutakse enne setupName(), tekib viga
// greet(); // Viga, kui name ei ole initsialiseeritud
}