Menu
Coddy logo textTech

Héritage de base

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 36 sur 110.

L'héritage permet à une classe d'acquérir les propriétés et les méthodes d'une autre classe. Au lieu de réécrire le même code, vous créez une nouvelle classe qui s'appuie sur une classe existante. La classe d'origine est appelée le parent (ou superclasse), et la nouvelle classe est l'enfant (ou sous-classe).

En Dart, vous utilisez le mot-clé extends pour hériter d'une classe parente :

class Animal {
  String name;
  
  Animal(this.name);
  
  void eat() {
    print('$name is eating');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void bark() {
    print('$name says woof!');
  }
}

void main() {
  var dog = Dog('Buddy');
  dog.eat();   // Hérité de Animal
  dog.bark();  // Défini dans Dog
}

La classe Dog a automatiquement accès à la propriété name et à la méthode eat() de Animal, ainsi qu'à sa propre méthode bark(). Cela crée une relation « est un » — un Dog est un Animal.

La classe enfant peut ajouter de nouvelles propriétés et méthodes, mais elle hérite de tout ce qui est public du parent. Notez que les membres privés (ceux avec _) ne sont pas directement accessibles dans les sous-classes de bibliothèques différentes, bien qu'ils existent toujours dans l'objet hérité.

challenge icon

Défi

Facile

Construisons un système de véhicules qui montre comment l’héritage permet aux classes enfants de réutiliser et d’étendre les fonctionnalités de la classe parente. Vous créerez une classe parente pour les véhicules généraux et une classe enfant pour un type de véhicule spécifique.

Vous organiserez votre code en deux fichiers :

  • vehicle.dart : définissez vos classes ici :
    • Une classe Vehicle (la classe parente) avec une propriété String brand, un constructeur qui prend la marque et une méthode start() qui affiche [brand] engine starting...
    • Une classe Motorcycle qui étend Vehicle. Elle doit avoir une propriété supplémentaire int cc (la cylindrée du moteur), un constructeur qui prend à la fois la marque et cc (en transmettant la marque à la classe parente à l’aide de super) et sa propre méthode wheelie() qui affiche [brand] is doing a wheelie!
  • main.dart : importez votre fichier de véhicule et démontrez l’héritage en action :
    • Créez un Vehicle avec la marque 'Toyota'
    • Appelez sa méthode start()
    • Créez un Motorcycle avec la marque 'Harley' et une cylindrée de 1200
    • Appelez la méthode start() de la moto (héritée de Vehicle)
    • Appelez la méthode wheelie() de la moto (définie dans Motorcycle)
    • Affichez Motorcycle engine: [cc]cc pour montrer la propre propriété de la classe enfant

Remarquez comment la classe Motorcycle accède automatiquement à la propriété brand et à la méthode start() de Vehicle, tout en possédant également sa propre propriété unique cc et sa méthode wheelie(). C’est là toute la puissance de l’héritage : construire à partir d’un code existant.

Résultat attendu :

Toyota engine starting...
Harley engine starting...
Harley is doing a wheelie!
Motorcycle engine: 1200cc

Essayez vous-même

import 'vehicle.dart';

void main() {
  // TODO: Créer un Vehicle avec la marque 'Toyota'
  
  // TODO: Appeler la méthode start() du vehicle
  
  // TODO: Créer une Motorcycle avec la marque 'Harley' et cc 1200
  
  // TODO: Appeler la méthode start() de la motorcycle (héritée de Vehicle)
  
  // TODO: Appeler la méthode wheelie() de la motorcycle
  
  // TODO: Afficher 'Motorcycle engine: [cc]cc' en utilisant la propriété cc de la motorcycle
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Dart en ligne