US

Les sous-classes

Si vous vous rappelez encore du chapitre 4, on y parle des objets, des classes et de la relation entre les deux. Pour rappel, la classe est en quelque sorte un plan à partir duquel on crée des objets.

La classe contient des définitions de variables et de méthodes, à partir de celle-ci, on crée des objets, instances de la classe. Chaque objet possède son propre état, défini par la valeur des variables d'instances, et il est possible d'invoquer les méthodes définies dans la classe sur un objet particulier.

Qu'est-ce-que l'héritage ? Il s'agit de repartir d'une classe existante et de l'étendre, lui ajouter de nouvelles variables, de nouvelles méthodes tout en conservant les anciennes.

Si on reprend l'exemple des GSM, on aurait un plan pour un GSM de base, et ensuite toute une série d'autres appareils, chacun ayant l'une ou l'autre fonctionnalité en plus, par exemple la communication Bluetooth, un appareil photo intégré, un lecteur d'empreintes digitales, ...

Exemple d'héritage
fig j9.1 Exemple d'héritage

L'héritage est un concept très important dans la programmation orientée objet. Il est possible d'étendre une classe afin de lui ajouter de nouvelles fonctionnalités.

Sous-classe

On possède donc une classe, et à partir de celle-ci, on va dériver une nouvelle classe. Cette nouvelle classe est appelée classe dérivée, sous-classe ou classe enfant tandis que l'autre classe est appelée classe étendue, superclasse ou encore classe parent.

Sous-classe
fig j9.2 Sous-classe

Cette manière d'écrire des classes est plus économique, en effet, les sous-classes vont hériter d'une partie des variables et méthodes définies dans la classe parent. Ce concept est à la base de la réutilisation de code, principe important en génie logiciel.

Relation is-a

Le chapitre 5 montrait deux relations qu'il pouvait exister entre classes, notamment la relation has-a lorsqu'une classe contenait des variables d'instance de type objet référençant une autre classe. Avec l'héritage apparait une autre relation : la relation is-a.

Relation is-a
fig j9.3 Relation is-a

La sous-classe est toujours plus spécifique que la classe parent tandis que celle-ci est donc plus générale que la classe enfant. Prenons par exemple une classe qui représente un mammifère, ce sera la classe parent. Un mammifère possède toute un série de caractéristiques. On peut ensuite créer une classe enfant qui représente un cheval. Cette classe aura des caractéristiques supplémentaires spécifiques aux chevaux.

On peut ainsi dire qu'un cheval est un mammifère. La classe Horse is-a Mammal comme le montre la figure suivante.

Exemple avec les mammifères
fig j9.4 Exemple avec les mammifères

On voit sur cet exemple que deux classes différentes étendent la même classe (ont la même classe parent), c'est tout à fait permis en Java et on assiste là à la construction d'une hiérarchie de classes. On en reparlera plus loin dans le chapitre.

En Java

En Java, on utilise le mot réservé extends pour signaler qu'une classe étend une autre. Voici pour commencer une classe qui représente un livre. Cette classe contient une variable qui contient le nombre de page du livre.