Le troisième aspect essentiel des objets est la notion d’héritage L’héritage est une technique
extrêmement efficace permettant la l’enrichissement des classes par la création de classes
plus spécifiques, appelées sous-classes, à partir de classes plus générales déjà existantes,
appelées sur-classes.
Plus précisement, lorsqu’une sous-classe est définie [à partir d’une sur-classe], elle va
hériter de l’ensemble des attributs et méthodes de sa sur-classe, c’est-à-dire que ces attributs
et méthodes seront disponibles pour les instances de la sous-classe, sans qu’il soit nécessaire
de les redéfinir explicitement
Naturellement, des attributs et/ou méthodes supplémentaires peuvent être définis par la
sous-classe, et constituent l’enrichissement apportée par cette classe.
Sous-classe, Super-classes:
Une super-classe :
est une classe « parente »
déclare les attributs/méthodes communs
peut avoir plusieurs sous-classes
class RectanglePlein :
class <nom de la classe enfant> : <nom de la classe parente> Rectangle
{ {
[public:] public:
// déclaration des attributs et méthodes Color couleur;
// spécifiques à la sous-classe // ...
... };
};
Jusqu’à maintenant, l’accès aux membres (attributs et méthodes) d’une classe pouvait
être :
soit public : visibilité totale à l’intérieur et à l’extérieur de la classe (mot-clé public)
soit privé : visibilité uniquement à l’intérieur de la classe (mot-clé private)
Un troisième type d’accès régit l’accès aux attributs/méthodes au sein d’une
hiérarchie de classes :
l’accès protégé : assure la visibilité des membres d’une classe dans les classes de sa
descendance Le mot clé est «protected».
Le niveau d’accès protégé correspond à une extension du niveau privé permettant
l’accès aux sous-classes... mais uniquement dans leur portée (de sous-classe), et non pas
dans la portée de la super-classe
L’héritage permet non seulement d’ajouter des propriétés et d’utiliser (dans la mesure
des droits d’accès) celles définies dans les classes de l’ascendance, mais il permet également
de modifier ces attributs et méthodes
Exemple:Redéfinition de la méthode surface pour la sous-classe RectanglePlein
class Rectangle
{
public:
int hauteur;
int largeur;
// les constructeurs ...
int surface()
{
return (hauteur*largeur);
}
// le reste de la classe ...
};
class RectanglePlein: Rectangle
{
public:
int interieur;
// les constructeurs ...
int surface()
{
return abs(hauteur*largeur);
}
// le reste de la sous-classe ...
};
3.Constructeurs et héritage