Quelle est la différence entre les mots-clés Abstract et late en Dart?
sobes.tech IA
Réponse de l'IA
Abstract est utilisé pour créer des classes abstraites, qui ne peuvent pas être instanciées directement. Une classe abstraite peut contenir des méthodes implémentées et des méthodes abstraites (sans implémentation). Les méthodes abstraites doivent être implémentées dans les sous-classes non abstraites.
late est utilisé pour l'initialisation différée des variables. Une variable marquée comme late sera garantie d'être initialisée avant sa première utilisation. Si une variable déclarée comme late n'est pas initialisée avant son premier accès, une erreur d'exécution se produira. Cela est utile pour initialiser des variables dont la valeur dépend d'autres variables ou de la logique qui s'exécute après la déclaration.
| Propriété | Abstract | late |
|---|---|---|
| Application à | Classes | Variables |
| Objectif | Définit un contrat, un modèle | Initialisation différée |
| Instanciation | Impossible directement | Possible |
| Obligation | Implémentations dans les sous-classes (pour méthodes abstraites) | Initialisation avant la première utilisation |
Exemple d'abstract:
// Définition d'une classe abstraite
abstract class Shape {
// Méthode abstraite
double getArea();
// Méthode implémentée
void printName() {
print("Ceci est une figure");
}
}
// Implémentation de la classe abstraite
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Impossible de créer une instance de Shape:
// var shape = Shape(); // Erreur
Exemple de late:
// Déclaration d'une variable avec initialisation différée
late String name;
void setupName() {
// Initialisation de la variable avant la première utilisation
name = "Flutter Developer";
}
void greet() {
// Première utilisation de la variable name après l'initialisation
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Affichera "Hello, Flutter Developer!"
// Si greet() était appelé avant setupName(), une erreur d'exécution se produirait
// greet(); // Erreur si name n'a pas été initialisé
}