Care este diferența dintre cuvintele cheie Abstract și late în Dart?
sobes.tech AI
Răspuns de la AI
Abstract este folosit pentru a crea clase abstracte, care nu pot fi instantiate direct. O clasă abstractă poate conține atât metode implementate, cât și metode abstracte (fără implementare). Metodele abstracte trebuie implementate în subclasele non-abstracte.
late este folosit pentru inițializarea întârziată a variabilelor. O variabilă marcată ca late va fi garantat că va fi inițializată înainte de prima sa utilizare. Dacă o variabilă declarată ca late nu este inițializată înainte de prima accesare, va apărea o eroare în timpul execuției. Acest lucru este util pentru inițializarea variabilelor ale căror valori depind de alte variabile sau logică care se execută după declarație.
| Proprietate | Abstract | late |
|---|---|---|
| Aplicare la | Clase | Variabile |
| Scop | Definește un contract, șablon | Inițializare întârziată |
| Instanțiere | Nu este posibil direct | Este posibil |
| Obligatoriu | Implementări în subclase (pentru metode abstracte) | Inițializare înainte de prima utilizare |
Exemplu de abstract:
// Definirea unei clase abstracte
abstract class Shape {
// Metodă abstractă
double getArea();
// Metodă implementată
void printName() {
print("Aceasta este o figură");
}
}
// Implementarea clasei abstracte
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Nu se poate crea o instanță a Shape:
// var shape = Shape(); // Eroare
Exemplu de late:
// Declarație de variabilă cu inițializare întârziată
late String name;
void setupName() {
// Inițializarea variabilei înainte de prima utilizare
name = "Flutter Developer";
}
void greet() {
// Prima utilizare a variabilei name după inițializare
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Va afișa "Hello, Flutter Developer!"
// Dacă greet() ar fi fost apelat înainte de setupName(), s-ar fi produs o eroare în timpul execuției
// greet(); // Eroare dacă name nu a fost inițializat
}