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é.
Défi
FacileConstruisons 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éthodestart()qui affiche[brand] engine starting... - Une classe
Motorcyclequi étendVehicle. Elle doit avoir une propriété supplémentaireint 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 desuper) et sa propre méthodewheelie()qui affiche[brand] is doing a wheelie!
- Une classe
main.dart: importez votre fichier de véhicule et démontrez l’héritage en action :- Créez un
Vehicleavec la marque'Toyota' - Appelez sa méthode
start() - Créez un
Motorcycleavec la marque'Harley'et une cylindrée de1200 - 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]ccpour montrer la propre propriété de la classe enfant
- Créez un
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: 1200ccEssayez 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
}
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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne