Maîtriser l'héritage en C# : créer du code réutilisable et maintenable
L'héritage est un concept clé de la POO. Il permet de définir une classe en termes d'une autre, facilitant création et maintenance, favorisant la réutilisation.
La nouvelle classe (dérivée) hérite des membres de la classe existante (base). Cela implémente la relation EST-UN (ex: Chien EST-UN Mammifère EST-UN Animal).
Classes de base et dérivées
Syntaxe :
<specificateur> class <classe_base> { ... }
class <classe_dérivée> : <classe_base> { ... }
Une classe peut hériter de plusieurs interfaces (pas de classes multiples).
Exemple : Shape et Rectangle
using System;
namespace ApplicationHeritage
{
class Forme
{
public void DefinirLargeur(int w) { largeur = w; }
public void DefinirHauteur(int h) { hauteur = h; }
protected int largeur;
protected int hauteur;
}
// Classe dérivée
class Rectangle : Forme
{
public int ObtenirAire()
{
return largeur * hauteur;
}
}
class TestRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.DefinirLargeur(5);
r.DefinirHauteur(7);
Console.WriteLine("Aire totale : {0}", r.ObtenirAire());
Console.ReadKey();
}
}
}
Résultat : Aire totale : 35
Initialisation de la classe de base
L'objet classe de base doit être créé avant la sous-classe. Utilisez base dans la liste d'initialisation :
class Tabletop : Rectangle
{
private double cout;
public Tabletop(double l, double w) : base(l, w) { }
public double ObtenirCout()
{
return ObtenirAire() * 70;
}
public void Afficher()
{
base.Afficher();
Console.WriteLine("Coût : {0}", ObtenirCout());
}
}
Héritage multiple en C#
C# ne supporte pas l'héritage multiple de classes. On utilise les interfaces pour l'implémenter.
Exemple avec interface
using System;
namespace ApplicationHeritage
{
class Forme
{
public void DefinirLargeur(int w) { largeur = w; }
public void DefinirHauteur(int h) { hauteur = h; }
protected int largeur, hauteur;
}
// Interface pour coût peinture
public interface ICoutPeinture
{
int ObtenirCout(int aire);
}
// Hérite de Forme ET implémente ICoutPeinture
class Rectangle : Forme, ICoutPeinture
{
public int ObtenirAire() { return largeur * hauteur; }
public int ObtenirCout(int aire) { return aire * 70; }
}
class TestRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.DefinirLargeur(5); r.DefinirHauteur(7);
int aire = r.ObtenirAire();
Console.WriteLine("Aire : {0}", aire);
Console.WriteLine("Coût peinture : ${0}", r.ObtenirCout(aire));
Console.ReadKey();
}
}
}
Résultat :
Aire : 35
Coût peinture : $2450
Langue C
- Classes et objets C# : Fondations pour une POO robuste
- Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
- Comprendre les classes imbriquées C# : Définition, utilisation et héritage
- Maîtriser les templates de classe en C++ : Guide pratique
- Maîtriser l'héritage Python : concepts, syntaxe et exemples pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression