11. Les classes abstraites
Une classe abstraite est un type spécial de classe qui ne peut pas être instanciée avec le mot-clé “new“. En fait, pour être utilisée, elle doit être héritée. Voyons immédiatement un exemple de classe abstraite, à partir de laquelle nous introduirons une série de concepts importants :
public abstract class Image { protected string mNom; protected int mNumCotes; public Figure(string Nom, int NumCotes) { mNom = Nom; mNumCotes = NumCotes; } public string Nom { get { return mNom; } } public int NumCotes { get { return mNumCotes; } } public abstract double Perimetre { get; } public abstract double Area { get; } public abstract void Dessine(); }
Une classe abstraite se déclare avec le mot clé “abstract“. Dans cette classe peuvent être définies des variables, des méthodes et des propriétés, tout comme nous l’avons fait jusqu’à présent (dans l’exemple ci-dessus, les variables mNom et mNumCotes, le constructeur, et les propriétés Nom et NumCotes).
Au-delà de cela, il est possible de déclarer un autre ensemble de méthodes et de propriétés qui doivent être implémentées par les classes qui en héritent : les méthodes et propriétés dites abstraites.
Dans notre cas, la classe qui hérite de Figure doit fournir une implémentation des propriétés Perimetre et Area (à partir de la définition, nous comprenons qu’ils seront en lecture seule, en cas de lecture/écriture on aurait eu get; set;) et la méthode Dessine.
La classe Carre hérite correctement de la classe Image :
public class Carre : Figure { private double mCote; public Carre(int Cote) : base(“Carre”, 4) { mCote = Cote; } public override double Perimetre { get { return mCote * 4; } } public override double Area { get { return mCote * mCote; } } public override void Dessine() { //… } }
Des caractéristiques communes
Figure est la classe qui contient les caractéristiques communes à chaque figure géométrique. La définition fournie oblige toutes les classes qui en héritent à redéfinir les méthodes et propriétés déclarées abstraites, sinon dans la phase de compilation, vous obtiendrez un message d’erreur car aucune action concrète ne correspond à la déclaration de la méthode : pas de code à exécuter.
Par exemple, en supprimant la méthode Dessine de la classe Carre, la compilation ne parvient pas à signaler que ‘Carre‘ n’implémente pas la méthode abstraite héritée de Figure.Dessine().
Pour les classes abstraites, les mêmes considérations que pour l’héritage sont valides, c’est-à-dire si une méthode requiert une classe abstraite comme argument, à sa place, toute classe qui en hérite peut être utilisée.
Dans VB.NET, une classe abstraite se déclare avec MustInherit et une méthode abstraite avec MustOverride.
Précédent : 10. Overloading Suivant : 12. Les interfaces
Étiquette :Structure du langage