Syntaxe de base de l'héritage (:)
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 19 sur 70.
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 classe de base (parent) avec des fonctionnalités partagées, puis vous créez des classes dérivées (enfants) qui en héritent.
En C#, vous utilisez le symbole deux-points : pour indiquer l'héritage :
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}La classe Dog hérite de tout ce qui provient de Animal. Elle a accès à la propriété Name et à la méthode Eat() sans avoir à les déclarer à nouveau, de plus, elle ajoute sa propre méthode Bark() :
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // Sortie : Buddy mange.
myDog.Bark(); // Sortie : Buddy dit Woof !C# ne prend en charge que l'héritage simple, ce qui signifie qu'une classe ne peut hériter que d'une seule classe de base. Cependant, vous pouvez construire des chaînes d'héritage où une classe dérivée devient la base d'une autre classe. Cela crée une hiérarchie qui modélise les relations du monde réel tout en gardant votre code organisé et réutilisable.
Défi
FacileConstruisons une hiérarchie de véhicules qui démontre comment l'héritage permet aux classes dérivées de partager les fonctionnalités d'une classe de base tout en ajoutant leurs propres comportements uniques.
Vous allez créer trois fichiers pour organiser votre code :
Vehicle.cs: Définissez une classeVehicledans l'espace de nomsTransport. Ce sera votre classe de base que tous les véhicules partagent. Elle doit avoir une propriétéBrand(string) et une propriétéYear(int), ainsi qu'une méthodeStartEngine()qui affiche"{Brand} engine started."Car.cs: Définissez une classeCardans l'espace de nomsTransportqui hérite deVehicle. La voiture ajoute sa propre propriétéNumberOfDoors(int) et une méthodeHonk()qui affiche"{Brand} goes Beep Beep!"Program.cs: Dans votre fichier principal, créez une instance deCaren utilisant les valeurs d'entrée. Définissez ses propriétés (y compris celles héritées), puis démontrez que la voiture peut utiliser à la fois ses propres méthodes et les méthodes qu'elle a héritées deVehicle.
Vous recevrez trois entrées :
- Nom de la marque (Brand)
- Année (Year)
- Nombre de portes (Number of doors)
Affichez les informations de la voiture et démontrez ses capacités dans ce format :
Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}Par exemple, si les entrées sont Toyota, 2022, et 4, la sortie devrait être :
Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!Remarquez comment votre Car peut accéder à la propriété Brand et à la méthode StartEngine() même si elles sont définies dans Vehicle. C'est le pouvoir de l'héritage - la classe dérivée obtient automatiquement tout de sa classe de base !
Aide-mémoire
L'héritage permet à une classe d'acquérir les propriétés et les méthodes d'une autre classe en utilisant le symbole deux-points : :
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}La classe dérivée (Dog) hérite de toutes les propriétés et méthodes de la classe de base (Animal) et peut ajouter les siennes :
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // Méthode héritée
myDog.Bark(); // Sa propre méthodeLe C# ne prend en charge que l'héritage simple - une classe ne peut hériter que d'une seule classe de base. Cependant, vous pouvez créer des chaînes d'héritage pour construire des hiérarchies.
Essayez vous-même
using System;
using Transport;
class Program
{
public static void Main(string[] args)
{
// Lire l'entrée
string brand = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
int doors = Convert.ToInt32(Console.ReadLine());
// TODO: Créer une instance de Car
// TODO: Définir les propriétés de la voiture (Brand, Year, NumberOfDoors)
// TODO: Afficher les informations de la voiture au format requis :
// Car: {Brand} ({Year})
// Doors: {NumberOfDoors}
// Ensuite, appeler StartEngine() et Honk()
}
}
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 externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur