Junior
Kuo skiriasi raktiniai žodžiai Abstract ir late Dart?
sobes.tech AI
Atsakymas iš AI
Abstract naudojamas kuriant abstrakčias klases, kurias nėra galima tiesiogiai instancijuoti. Abstrakti klasė gali turėti įgyvendintus ir abstrakčius (be įgyvendinimo) metodus. Abstraktūs metodai turi būti įgyvendinti pogrupiuose.
late naudojamas vėluotai inicializacijai. late pažymėtas kintamasis bus garantuotai inicializuotas prieš pirmąjį naudojimą. Jei late pažymėtas kintamasis nėra inicializuotas iki pirmojo naudojimo, įvyks vykdymo klaida. Tai naudinga kintamiesiems, kurių reikšmės priklauso nuo kitų kintamųjų ar logikos, vykdomos po deklaracijos.
| Savybė | Abstract | late |
|---|---|---|
| Taikoma | Klasėms | Kintamiesiems |
| Tikslas | Apibrėžia sutartį, šabloną | Vėlyva inicializacija |
| Instancijavimas | Negalima tiesiogiai | Gali būti |
| Privalomumas | Metodų įgyvendinimas pogrupiuose | Inicializacija prieš pirmą naudojimą |
Pavyzdys abstract:
// Abstrakčios klasės apibrėžimas
abstract class Shape {
// Abstraktus metodas
double getArea();
// Įgyvendintas metodas
void printName() {
print("Tai yra figūra");
}
}
// Abstrakčios klasės įgyvendinimas
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Negalima sukurti Shape egzemplioriaus:
// var shape = Shape(); // Klaida
Pavyzdys late:
// Vėluotai inicializuojamas kintamasis
late String name;
void setupName() {
// Inicializacija prieš pirmą naudojimą
name = "Flutter Developer";
}
void greet() {
// Pirmas naudojimas po inicializacijos
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Išves "Hello, Flutter Developer!"
// Jei greet() būtų iškviestas prieš setupName(), įvyktų klaida
// greet(); // Klaida, jei name nebuvo inicializuotas
}