Héritage en C#

Introduction à l'héritage

En programmation orientée objet (OOP), l'héritage est un concept clé qui permet de créer de nouvelles classes à partir de classes existantes. Dans le langage C#, nous distinguons les classes parent et enfant. Les classes enfant, à l'instar des relations dans la vie réelle, peuvent hériter des propriétés, méthodes et comportements de leur classe parente tout en ajoutant leurs propres caractéristiques spécifiques.

En résumé, une classe enfant en C# hérite des attributs et des fonctionnalités de sa classe parent, tout en ayant la possibilité de définir des caractéristiques uniques. Une classe enfant peut modifier ou remplacer les caractéristiques de sa classe parent, offrant ainsi une nouvelle implémentation pour des méthodes déjà présentes dans la classe parent. Ce processus est connu sous le nom de polymorphisme, un autre concept fondamental de l'OOP.

Syntaxe de l'héritage en C

Pour déclarer une classe enfant, nous utilisons le symbole ":" pour spécifier la classe parente. Voici un exemple de base :

public class Phone {
    public string Brand { get; set; }
    public string Model { get; set; }
    public void Call(string phoneNumber) {
        Console.WriteLine($"Appel à {phoneNumber}...");
    }
}

public class SmartPhone : Phone {
    public void BrowseInternet() {
        Console.WriteLine("Navigation sur Internet...");
    }

    public void SendMessage(string phoneNumber, string message) {
        Console.WriteLine($"Envoi d'un message à {phoneNumber}: {message}");
    }
}

public class LandLinePhone : Phone {
    // Les téléphones fixes n'ont pas de fonctionnalités de navigation sur Internet ou d'envoi de messages
}

Utilisation des classes héritées

Dans cet exemple, nous avons les classes enfant SmartPhone et LandLinePhone, qui héritent toutes deux de la classe Phone. Cela signifie qu'elles ont accès aux propriétés communes, telles que Brand et Model, ainsi qu'à la méthode Call() définie dans la classe parente.

La classe SmartPhone dispose de deux méthodes supplémentaires, BrowseInternet() et SendMessage(), spécifiques aux smartphones. Ces fonctionnalités n'existent pas dans la classe parent Phone. D'autre part, la classe LandLinePhone n'a pas de méthodes additionnelles, car les téléphones fixes sont principalement utilisés pour passer des appels, ce qui est déjà hérité de la classe parent.

Voici un exemple de mise en œuvre des classes :

public class Program {
    public static void Main() {
        SmartPhone cellPhone = new SmartPhone {
            Brand = "Apple",
            Model = "iPhone 14"
        };

        LandLinePhone housePhone = new LandLinePhone {
            Brand = "Panasonic",
            Model = "KX-TG3411SX"
        };

        cellPhone.Call("4259638547");  // Sortie : "Appel à 4259638547..."
        cellPhone.SendMessage("2589634712", "Salut! Je suis un nouveau contributeur de Codecademy"); // Sortie : "Envoi d'un message à 2589634712: Salut! Je suis un nouveau contributeur de Codecademy"
        cellPhone.BrowseInternet();   // Sortie : "Navigation sur Internet..."

        housePhone.Call("4384938752");  // Sortie : "Appel à 4384938752..."
    }
}

Types d'héritage

Il existe plusieurs types d'héritage en C# :

Héritage simple : Une classe enfant hérite des caractéristiques d'une seule classe parent.

public class Vehicle {  // Propriétés et méthodes de la classe Vehicle
}
public class Car : Vehicle {  // Propriétés et méthodes de la classe Car, accessibles grâce à l'héritage
}

Héritage multilevel : Une classe enfant hérite d'une classe parent, elle-même dérivée d'une autre classe parent. Cela forme une chaîne d'héritage, typique dans les relations grands-parents, parents et enfants.

public class Vehicle {  // Propriétés et méthodes de la classe Vehicle
}
public class Car : Vehicle {  // Propriétés et méthodes de la classe Car, héritées de Vehicle
}
public class SportsCar : Car {  // Propriétés et méthodes de la classe SportsCar, héritées de Car
}

Héritage hiérarchique : Une classe parent a plusieurs classes enfants.

public class Animal {  // Propriétés et méthodes de la classe Animal
}
public class Dog : Animal {  // Propriétés et méthodes de la classe Dog, héritées d'Animal
}
public class Cat : Animal {  // Propriétés et méthodes de la classe Cat, héritées d'Animal
}
// Autres classes comme Lion et Mouse héritant également d'Animal.

Modificateurs d'accès

Les modificateurs d'accès en C# sont des mots-clés utilisés pour définir le niveau d'accessibilité (ou visibilité) des propriétés, méthodes ou variables dans un programme C#.

| Mot-clé | Description | |---------------------|-------------| | public | Disponible n'importe où dans le programme. | | protected | Disponible uniquement à la classe actuelle ou aux classes enfants qui en héritent. | | internal | Disponible uniquement pour les classes dans le projet actuel où il est défini. | | protected internal | Disponible pour la classe actuelle, les classes enfants et les classes du projet actuel. | | private | Disponible uniquement dans la classe où il est déclaré. | | private protected | Disponible uniquement pour les classes dans le projet et pour les enfants de toutes les classes qui héritent de la classe parent dans le même projet. |