Junior
Koja je razlika između ključnih reči Abstract i late u Dart-u?
sobes.tech АИ
Одговор од АИ
Abstract se koristi za kreiranje apstraktnih klasa koje se ne mogu direktno instancirati. Apstraktna klasa može sadržavati implementirane i apstraktne (bez implementacije) metode. Apstraktne metode moraju biti implementirane u neapstraktnim podklasama.
late se koristi za odloženu inicijalizaciju promenljivih. Promenljiva označena kao late će biti garantovano inicijalizovana pre svoje prve upotrebe. Ako promenljiva deklarisana kao late nije inicijalizovana pre prvog pristupa, doći će do greške u toku izvršenja. Ovo je korisno za inicijalizaciju promenljivih čije vrednosti zavise od drugih promenljivih ili logike koja se izvršava nakon deklaracije.
| Svojstvo | Abstract | late |
|---|---|---|
| Primena na | Klase | Promenljive |
| Cilj | Definiše ugovor, šablon | Odložena inicijalizacija |
| Instanciranje | Nije moguće direktno | Moguće |
| Obaveza | Implementacije u podklasama (za apstraktne metode) | Inicijalizacija pre prve upotrebe |
Primer abstract:
// Definicija apstraktne klase
abstract class Shape {
// Apstraktna metoda
double getArea();
// Implementirana metoda
void printName() {
print("Ovo je figura");
}
}
// Implementacija apstraktne klase
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Nije moguće kreirati instancu Shape:
// var shape = Shape(); // Greška
Primer late:
// Deklaracija promenljive sa odloženom inicijalizacijom
late String name;
void setupName() {
// Inicijalizacija promenljive pre prve upotrebe
name = "Flutter Developer";
}
void greet() {
// Prva upotreba promenljive name nakon inicijalizacije
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Ispisaće "Hello, Flutter Developer!"
// Ako bi se greet() pozvalo pre setupName(), došlo bi do greške u toku izvršenja
// greet(); // Greška ako name nije inicijalizovan
}