Le concept d'héritage est un des concepts
les plus importants de la programmation orientée
objet, car il conditionne irréversiblement la façon selon laquelle un code
Java est écrit. L'héritage est un mécanisme permettant de créer
une nouvelle classe à partir d'une classe existante en lui proférant ses
propriétés et ses méthodes.
Ainsi, pour définir une nouvelle classe, il suffit de la faire hériter
d'une classe existante et de lui ajouter de nouvelles propriétés/méthodes.
De cette façon, les classes héritées forment une hiérarchie descendante,
au sommet de laquelle se situe la classe de base (superclasse). On appelle également la
classe héritée la sous-classe et la classe parente la super-classe.
Avec Java, l'arborescence est stricte, c'est-à-dire qu'une classe donnée
ne peut possèder qu'une seule superclasse (l'héritage est dit simple contrairement à des langages comme
le C++, pour lesquels un héritage dit multiple
est possible). Par contre, une classe peut possèder un nombre illimité de sous-classes.
Lors de l'instanciation d'une classe, celle-ci hérite de (cela signifie qu'elle reçoit) l'ensemble
des propriétés et des méthodes de sa superclasse, qui elle-même hérite
d'une éventuelle superclasse, etc.
Par conséquent le travail principal du programmeur Java consiste à concevoir
une hiérarchie de classe, c'est-à-dire organiser les classes de telles façon
que les propriétés et méthodes communes à plusieurs classes soient
placées dans une superclasse.
Grâce à ce système organisationnel, il est aisé de réutiliser
des composants existants et de leur ajouter un comportement. De plus, la modification de la superclasse
implique la modification automatique de toutes les sous-classes.
Pour plus d'informations sur l'héritage, consulter
la section "programmation orientée objet"
Une classe se définit tout simplement grâce au mot-clé class
de la manière suivante par exemple:
class Ccm {
// Corps de la classe
}
Par défaut une classe hérite de la "super-superclasse" nommée
Object. Pour faire hériter une classe d'une superclasse, Java fournit le mot-clé
extends, c'est-à-dire que les quelques lignes de code ci-dessus sont équivalentes
à:
class Ccm extends Object {
// Corps de la classe
}
Au même titre que le mot-clé this permet de faire référence
à l'objet en cours, le mot-clé super permet de désigner la superclasse,
c'est-à-dire qu'à l'aide du mot-clé super, il est possible
de manipuler les données membres et les méthodes de la superclasse.
Pour manipuler une proriété de la superclasse, il suffit d'utiliser la syntaxe suivante:
super.nom_de_la_propriete
De la même façon, pour manipuler une méthode de la superclasse, il suffit d'utiliser la syntaxe suivante:
super.nom_de_la_methode()
Enfin, il est possible de faire appel au constructeur de la classe parente en fournissant
des arguments au mot-clé super de la façon suivante:
super(parametre1,parametre2,...)
Lorsqu'une classe hérite de sa superclasse, elle hérite de ses méthodes,
c'est-à-dire qu'elle possède les mêmes méthodes que sa superclasse.
Il est possible de redéfinir totalement une méthode en la redéfinissant
(mêmes nombres et types d'arguments que la méthode de la superclasse). De cette
façon, la méthode originale est ignorée au profit de sa redéfinition.
La redéfinition d'une méthode consiste à réécrire totalement la
méthode initiale. Il est parfois utile de simplement ajouter un comportement au comportement
original, pour cela l'utilisation du mot-clé super s'avère nécessaire.
En appelant le constructeur de la superclasse dans le corps de la méthode qui la redéfinit,
et en ajoutant de nouvelles instructions, la méthode originale est dotée de comportements
supplémentaires.
|