Junior
Kāda ir atšķirība starp atslēgvārdiem Abstract un late Dart?
sobes.tech AI
Atbilde no AI
Abstract tiek izmanto, lai izveidotu abstraktas klases, kuras nav iespējams tieši instancēt. Abstrakta klase var saturēt gan realizētus, gan abstraktus (bez realizācijas) metodes. Abstraktās metodes jārealizē apakšklasēs.
late tiek izmantots atliktai inicializācijai. late atzīmēts mainīgais tiks garantēti inicializēts pirms tā pirmās lietošanas. Ja mainīgais ir atzīmēts kā late un tas nav inicializēts pirms pirmās piekļuves, notiks izpildes kļūda. Tas ir noderīgi mainīgajiem, kuru vērtības ir atkarīgas no citiem mainīgajiem vai loģikas, kas tiek izpildīta pēc deklarēšanas.
| Īpašība | Abstract | late |
|---|---|---|
| Pielietojums | Klases | Mainīgajiem |
| Mērķis | Definēt līgumu, šablonu | Atlikta inicializācija |
| Instancēšana | Nav iespējama tieši | Ir iespējama |
| Obligātība | Metožu realizācija apakšklasēs | Inicializācija pirms pirmās lietošanas |
Piemērs abstract:
// Abstraktās klases definīcija
abstract class Shape {
// Abstrakta metode
double getArea();
// Realizēta metode
void printName() {
print("Šis ir figūra");
}
}
// Abstraktās klases realizācija
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Nav iespējams izveidot Shape instanci:
// var shape = Shape(); // Kļūda
Piemērs late:
// Deklarācija ar atliktu inicializāciju
late String name;
void setupName() {
// Inicializācija pirms pirmās lietošanas
name = "Flutter Developer";
}
void greet() {
// Pirmā lietošana pēc inicializācijas
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Izvadīs "Hello, Flutter Developer!"
// Ja greet() tiktu izsaukts pirms setupName(), būtu kļūda
// greet(); // Kļūda, ja name nav inicializēts
}