Aller au contenu

Exercices sur l'héritage

Ces exercices vous aideront à maîtriser les concepts d'héritage, de constructeurs de base, de membres protégés et de polymorphisme.


🔵 Section 1 : Bases de l'héritage

Exercice 1 : La relation "Est un"

Créez une classe de base Vehicule avec une propriété Marque (string) et une méthode Klaxonner() qui affiche "Bip Bip !". Créez ensuite une classe Voiture qui hérite de Vehicule. Testez en instanciant une Voiture et en appelant Klaxonner().

Exercice 2 : Extension de propriétés

En utilisant les classes de l'exercice 1, ajoutez à la classe Voiture une propriété NombreDePortes (int). Vérifiez qu'un objet Voiture possède bien à la fois une Marque et un NombreDePortes.

Exercice 3 : L'héritage est unidirectionnel

Créez une classe Velo qui hérite de Vehicule. Si vous ajoutez une propriété TypeDeGuidon à Velo, est-ce qu'une Voiture y a accès ? Pourquoi ?


🟣 Section 2 : Constructeurs et mot-clé base

Exercice 4 : Passage de paramètres simple

Créez une classe Animal avec un constructeur qui prend un nom. Créez une classe Chien qui hérite de Animal et dont le constructeur passe le nom à la classe de base en utilisant : base(nom).

Exercice 5 : Plusieurs paramètres

Créez une classe Personne avec les propriétés Nom et Prenom initialisées par un constructeur. Créez une classe Employe qui hérite de Personne et ajoute une propriété Salaire. Le constructeur d'Employe doit recevoir les 3 informations et en passer 2 à la classe de base.

Exercice 6 : Constructeur par défaut vs Paramétré

Si la classe de base n'a qu'un constructeur avec paramètres, que se passe-t-il si la classe dérivée ne définit pas de constructeur ? Essayez et expliquez l'erreur de compilation.

Exercice 7 : Appeler une méthode de la classe de base

Dans une classe Robot, créez une méthode Allumer(). Dans une sous-classe RobotNettoyeur, créez une méthode Initialiser() qui appelle base.Allumer() avant d'afficher "Nettoyage en cours...".


🟤 Section 3 : Le modificateur protected

Exercice 8 : Accès restreint

Créez une classe CompteBancaire avec un champ protected decimal _solde. Créez une classe CompteEpargne qui hérite de CompteBancaire. Ajoutez une méthode AjouterInteret() dans CompteEpargne qui modifie directement _solde. Est-ce que _solde est accessible depuis le Main ?

Exercice 9 : Calcul protégé

Dans une classe Forme, créez une propriété protected double Multiplicateur = 1.0. Créez une classe Carre qui utilise ce multiplicateur pour ajuster son calcul d'aire.


⚫ Section 4 : virtual et override

Exercice 10 : Le polymorphisme simple

Créez une classe Oiseau avec une méthode virtual void Chanter() qui affiche "Cui cui". Créez une classe Corbeau qui override cette méthode pour afficher "Croa croa".

Exercice 11 : Redéfinition de ToString()

Toutes les classes en C# héritent de la classe Object. Redéfinissez (override) la méthode ToString() dans une classe Produit (avec Nom et Prix) pour qu'elle retourne une chaîne formatée comme : "Produit: [Nom] - [Prix]$".

Exercice 12 : Utilisation de base dans un override

Créez une classe Message. Sa méthode virtual void Afficher() écrit "Début du message :". Créez une classe MessageUrgent. Son override de Afficher() doit appeler base.Afficher() PUIS écrire "C'EST URGENT !".

Exercice 13 : Hiérarchie à 3 niveaux

Créez Animal -> Mammifere -> Humain. Ajoutez une méthode virtual void Respirer() dans Animal qui affiche "L'animal respire...". Redéfinissez-la à chaque niveau pour ajouter des précisions (ex: "Le mammifère respire avec des poumons", "L'humain respire profondément").


🔘 Section 5 : Défis et synthèse

Exercice 14 : Système de paie

Créez une classe Employe avec une méthode virtual decimal CalculerPaie(). Par défaut, cette méthode doit retourner 0.
- EmployeSalarie : paie fixe mensuelle (redéfinit la méthode).
- EmployeHoraire : taux horaire * heures travaillées (redéfinit la méthode).
Créez une liste List<Employe> contenant les deux types et affichez la paie de chacun via une boucle.

Exercice 15 : Le mini-jeu RPG

Créez une classe Hero avec :
- Propriétés Nom, PointsDeVie.
- Méthode virtual void Attaquer(). Par défaut, elle affiche "[Nom] donne un coup de poing !".
Créez Guerrier et Mage.
- Le Guerrier override la méthode pour attaquer avec une épée.
- Le Mage override la méthode pour attaquer avec un sort ET consomme du mana (une propriété propre au mage).
Gérez les points de vie via une propriété protected pour que seul le Hero et ses classes dérivées puissent les modifier lors d'un soin par exemple.