Menu
Coddy logo textTech

Bases de l'héritage

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 démontre comment l'héritage permet aux classes enfants de réutiliser et d'étendre les fonctionnalités de la classe parente. Vous allez créer une classe parente pour les véhicules généraux et une classe enfant pour un type spécifique de véhicule.

Vous organiserez votre code en deux fichiers :

  • vehicle.dart : Définissez vos classes ici :
    • Une classe Vehicle (le parent) 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 (cylindrée du moteur), un constructeur qui prend à la fois la marque et les cc (en passant la marque au parent via 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 une Motorcycle avec la marque 'Harley' et cc 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 propriété propre à l'enfant

Remarquez comment la classe Motorcycle accède automatiquement à la propriété brand et à la méthode start() de Vehicle, tout en ayant sa propre propriété unique cc et sa méthode wheelie(). C'est là toute la puissance de l'héritage : construire sur du code existant.

Résultat attendu :

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

Aide-mémoire

Utilisez le mot-clé extends pour créer une classe enfant qui hérite 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!');
  }
}

La classe enfant hérite de toutes les propriétés et méthodes publiques de la classe parente. Utilisez super dans le constructeur de l'enfant pour passer des paramètres au constructeur du parent.

Les classes enfants peuvent ajouter leurs propres propriétés et méthodes tout en accédant à celles héritées :

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

Cela crée une relation « est un » - un Dog est un Animal.

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