Sobes.tech
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
}