US

La classe Object

Hi�rarchie de classes

Une sous-classe qui est d�riv�e d'une superclasse peut elle m�me avoir une sous-classe. De cette mani�re, on construit ce que l'on appelle une hi�rarchie de classes. Un exemple typique d'hi�archie de classes se base sur le monde animal et est illustr� sur la figure suivante.

Hi�rarchie de classes
fig j9.6 Hi�rarchie de classes

Il n'y a pas de limite quant au nombre d'enfants que peut avoir une classe ou quant au nombre de niveaux qu'une hi�rarchie de classe peut avoir. Une classe peut donc avoir une classe parent, une classe grand-parent, ... En g�n�ral, on parlera des anc�tres d'une classe. Une classe h�rite donc des �l�ments de tous ses anc�tres.

Il existe encore une autre relation particuli�re entres deux classes, enfants d'un m�me parent. En anglais, il existe un mot pour qualifier cette relation, on dit que les deux classes sont siblings. Il n'existe pas de mot en fran�ais, on dit simplement que les deux classes ont le m�me parent. Ce genre de classes ont la particularit� d'h�riter des m�mes �l�ments, tandis que chacune d'entre elles va se sp�cialiser.

G�n�ral et sp�cifique

Pour rappel, une superclasse est toujours plus g�n�rale qu'une sous-classe, ainsi, dans une hi�rarchie de classes, les caract�ristiques communes � tout le monde se trouveront dans les classes les plus hautes tandis que les caract�ristiques sp�cifiques se retrouveront dans les classes du bas de la hi�rarchie.

Enfin, il faut savoir que la relation d'h�ritage est transitive, c'est-�-dire que tout ce qu'une classe a h�rit� de sa superclasse, elle va le l�guer � propres ses sous-classes. Ainsi, un membre h�rit� peut se trouver dans la superclasse, ou plus haut dans la hi�rarchie, dans un des anc�tres.

Hi�archie d'interfaces

Le concept d'h�ritage s'applique �galement aux interfaces, ainsi, une interface peut en �tendre une autre. Une classe qui impl�mente une telle interface devra donc impl�menter toutes les m�thodes de l'interface ainsi que de la superinterface, etc ...

On peut donc construire des hi�rarchies d'interfaces. Il est n�anmoins interdit de m�langer classes et interfaces, une classe n'�tend pas une interface et une interface n'�tend pas une classe.

Classes et interfaces
fig j9.7 Classes et interfaces

La figure pr�c�dent illustre un sch�ma que l'on retrouve assez souvent. On a tout d'abord une interface Interface1 qui est impl�ment�e par la classe Classe1. Classe1 impl�mente donc toutes les m�thodes qui sont dans l'interface Interface1.

Ensuite, on d�cide d'�tendre l'interface Interface1, de lui ajouter des m�thodes, mais pour le faire de mani�re « propre », c'est-�-dire en respectant la programmation orient�e objet, on cr�e une nouvelle interface Interface2 qui �tend Interface1. On ajoute les m�thodes suppl�mentaires dans Interface2.

Si on veut �crire une classe qui impl�mente Interface2, elle devra contenir une impl�mentation pour toutes les m�thodes de Interface1 et Interface2, la solution offerte par la programmation orient�e objet est de repartir de Classe1 qui contient d�j� une impl�mentation pour toutes les m�thodes de Interface1, on cr�e une nouvelle classe Classe2 qui �tend Classe1 et on y ajoute une impl�mentation des m�thodes de Interface2.

La classe Object

En Java, toute classe qui n'�tend pas une autre en utilisant le mot r�serv� extends �tend implicitement la classe Object (qui se trouve dans le package java.lang). Ainsi, toutes les classes Java ont comme premier anc�tre la classe Object.

Les m�thodes de la classe Object

�tant donn� que toutes les classes �tendent la classe Object (directement ou indirectement), tout objet � acc�s aux m�thodes publiques d�finies dans la classe Object. Certaines des m�thodes de cette classe sont tr�s int�ressantes et m�ritent notre attention.

On a d�j� rencontr� quelques-unes de ces m�thodes tout au long de ce tutoriel Java, on conseillait par exemple d'ajouter � toutes les classes une m�thode toString, une m�thode equals, ... Jusqu'� pr�sent, on ne savait pas trop pourquoi ces m�thodes devaient poss�der une telle signature, et bien maintenant, on comprends qu'il s'agit simplement d'une surcharge des m�thodes se trouvant dans la classe Object.

  1. public String toString();

    Cette m�thode permet d'obtenir une repr�sentation de l'objet sous forme d'une chaine de caract�re.

  2. public boolean equals (Object o);

    Cette m�thode permet de comparer un objet � l'objet courant pour savoir s'ils sont �gaux ou non.

  3. protected Object clone();

    Cette m�thode permet d'obtenir une copie de l'objet et non pas une copie de la r�f�rence vers l'objet.

La classe Object rassemble donc des m�thodes que tout objet aura �tant donn� que toutes les classes h�ritent directement ou indirectement de la classe Object. Cette classe se trouvant tout en haut de la hi�rarchie de classes poss�de donc des m�thodes tr�s g�n�rales comme nous venons de les voir.

Sp�cialisation des m�thodes de la classe Object

Il est n�anmoins possible de sp�cialiser le comportement de ces m�thodes pour une classe particuli�re en utilisant le m�canisme de surcharge de m�thode rencontr� � la section pr�c�dente. Nous allons voir un exemple.

Voici une classe qui repr�sente un livre. Dans notre exemple, un livre ne poss�de qu'un titre ainsi qu'une liste d'auteurs. On va donc utiliser deux variables d'instances : la premi�re est un tableau de String pour les auteurs et la seconde un String pour le titre.