Menu
Coddy logo textTech

Redéfinition de méthode

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

La redéfinition de méthode se produit lorsqu’une classe enfant fournit sa propre implémentation d’une méthode qui existe déjà dans la classe parente. Cela permet aux sous-classes de personnaliser le comportement hérité tout en conservant la même signature de méthode.

Lorsque vous définissez une méthode dans une classe enfant avec le même nom et les mêmes paramètres que dans la classe parente, la version de la classe enfant remplace celle-ci :

class Animal {
  String name;
  
  Animal(this.name);
  
  void speak() {
    print('$name makes a sound');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void speak() {
    print('$name barks: Woof!');
  }
}

void main() {
  var animal = Animal('Generic');
  var dog = Dog('Buddy');
  
  animal.speak();  // Generic fait un son
  dog.speak();     // Buddy aboie : Woof!
}

Lorsque tu appelles speak() sur une instance de Dog, Dart exécute la version de Dog, et non celle de Animal. La classe enfant a redéfini la méthode de la classe parent.

Vous pouvez également combiner la redéfinition avec super pour étendre plutôt que remplacer le comportement du parent :

class Cat extends Animal {
  Cat(String name) : super(name);
  
  void speak() {
    super.speak();  // Appeler d'abord la version du parent
    print('$name also purrs');
  }
}

Ce modèle vous permet de vous appuyer sur des fonctionnalités existantes. La règle essentielle est simple : dans la classe enfant, une méthode portant le même nom et ayant les mêmes paramètres remplace l’implémentation de la classe parente lorsqu’elle est appelée sur des instances de la classe enfant.

challenge icon

Défi

Facile

Construisons un système de notifications qui montre comment les classes enfants peuvent remplacer les méthodes parentes pour personnaliser le comportement. Vous créerez différents types de notifications qui transmettront chacun les messages à leur propre manière.

Vous organiserez votre code en deux fichiers :

  • notification.dart : Définissez ici votre hiérarchie de notifications :
    • Une classe Notification (la classe parente) avec un String title et un String message. Incluez un constructeur qui accepte les deux valeurs ainsi qu’une méthode send() qui affiche Notification: [title] - [message]
    • Une classe EmailNotification qui étend Notification et ajoute une propriété String recipient. Remplacez la méthode send() pour afficher Sending email to [recipient]: [title] - [message]
    • Une classe PushNotification qui étend Notification et ajoute une propriété String deviceId. Remplacez la méthode send() pour appeler d’abord la méthode send() de la classe parente à l’aide de super, puis afficher Pushed to device: [deviceId] à la ligne suivante
  • main.dart : Importez votre fichier de notifications et démontrez le remplacement de méthode en action :
    • Créez une Notification de base avec le titre 'Alert' et le message 'System update available'
    • Appelez sa méthode send()
    • Affichez une ligne vide
    • Créez une EmailNotification avec le titre 'Welcome', le message 'Thanks for signing up!' et le destinataire 'user@example.com'
    • Appelez sa méthode send()
    • Affichez une ligne vide
    • Créez une PushNotification avec le titre 'Reminder', le message 'Meeting in 10 minutes' et le deviceId 'DEVICE-001'
    • Appelez sa méthode send()

Remarquez comment EmailNotification remplace complètement le comportement de la classe parente, tandis que PushNotification l’étend en appelant d’abord super.send(). Les deux approches sont valides pour remplacer des méthodes, selon vos besoins.

Sortie attendue :

Notification: Alert - System update available

Sending email to user@example.com: Welcome - Thanks for signing up!

Notification: Reminder - Meeting in 10 minutes
Pushed to device: DEVICE-001

Essayez vous-même

import 'notification.dart';

void main() {
  // TODO: Create a base Notification with title 'Alert' and message 'System update available'
  // Appelez sa méthode send()

  // TODO: Affichez une ligne vide

  // TODO: Créez une EmailNotification avec :
  // - title: 'Welcome'
  // - message: 'Thanks for signing up!'
  // - recipient: 'user@example.com'
  // Appelez sa méthode send()

  // TODO: Affichez une ligne vide

  // TODO: Créez une PushNotification avec :
  // - title: 'Reminder'
  // - message: 'Meeting in 10 minutes'
  // - deviceId: 'DEVICE-001'
  // Appelez sa méthode send()
}
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