Académique Documents
Professionnel Documents
Culture Documents
Préparé par
Ing. Djimnaibeye Sidoine
1 Héritage
2 Polymorphisme
1 Héritage
2 Polymorphisme
1 Héritage
2 Polymorphisme
Définition
Définition
Une classe peut avoir plusieurs sous classes. Une classe ne peut avoir
qu’une seule classe mère : il n’y a pas d’héritage multiple en java.
Object est la classe parente de toutes les classes en java. Toutes les
variables et méthodes contenues dans Object sont accessibles à partir
de n’importe quelle classe car par héritage successif toutes les classes
héritent d’Object.
Syntaxe
On utilise le mot clé extends pour indiquer qu’une classe hérite d’une
autre. En l’absence de ce mot réservé associé à une classe, le compi-
lateur considère la classe Object comme classe parent.
class Fille extends Mere {...}
Exemple 1
la figure ci dessous présente une organisation hiérarchique des classes
Carre, Rectangle et Cercle telle que Carre hérite de Rectangle qui hé-
rite, ainsi que Cercle, d’une classe Forme.
Cas particuliers :
La classe de base ne possède aucun constructeur
Dans ce cas, si la classe dérivée veut définir son propre
constructeur, elle peut optionnellement appeler dans la 1ère
instruction de constructeur la clause « super () » pour désigner le
constructeur par défaut de la classe de base.
La classe dérivée ne possède pas un constructeur
Dans ce cas, le constructeur par défaut de la classe dérivée doit
initialiser les attributs de la classe dérivée et appeler :
Le constructeur par défaut de la classe de base si elle ne possède
aucun constructeur.
Le constructeur sans argument si elle possède au moins un
constructeur.
Dans le cas où il n’ y a pas un constructeur sans argument et il y a
d’autres constructeurs avec arguments, le compilateur génère des
erreurs.
une classe dérivée pourra à son tour surcharger une méthode d’une
classe ascendante. Bien entendu, la ou les nouvelles méthodes ne de-
viendront utilisables que par la classe dérivée ou ses descendantes,
mais pas par ses ascendantes. De même une classe dérivée peut four-
nir une nouvelle définition d’une méthode de même nom et aussi de
même signature et de même type de retour.
Alors que la surcharge cumule plusieurs méthodes de même nom, la
redéfinition substitue une méthode à une autre.
Lors de la création d’une classe « mère » il faut tenir compte des points
suivants :
la définition des accès aux variables d’instances, très souvent
privées, doit être réfléchie entre protected et private ;
pour empêcher la redéfinition d’une méthode (surcharge) il faut la
déclarer avec le modificateur final. Lors de
la création d’une classe fille, pour chaque méthode héritée qui
n’est pas final, il faut envisager les cas suivant :
la méthode héritée convient à la classe fille : on ne doit pas la
redéfinir ;
la méthode héritée convient mais partiellement du fait de la
spécialisation apportée par la classe fille : il faut la redéfinir voir la
surcharger. La plupart du temps une redéfinition commencera par
appeler la méthode héritée (via super) pour garantir l’évolution du
code ;
la méthode héritée ne convient pas : il faut redéfinir ou surcharger
la méthode sans appeler la méthode héritée lors de la redéfinition.
Polymorphisme
Polymorphisme
Interface
Une interface est un type, au même titre qu’une classe, mais abstrait et
qui donc ne peut être instancié (par appel à new plus constructeur).
Une interface décrit un ensemble de signatures de méthodes, sans im-
plémentation, qui doivent être implémentées dans toutes les classes qui
implémentent l’interface. L’utilité du concept d’interface réside dans le
regroupement de plusieurs classes, tel que chacune implémente un en-
semble commun de méthodes, sous un même type. Une interface pos-
sède les caractéristiques suivantes :
elle contient des signatures de méthodes ;
elle ne peut pas contenir de variables ;
une interface peut hériter d’une autre interface (avec le mot-clé
extends) ;
une classe (abstraite ou non) peut implémenter plusieurs
interfaces. La liste des interfaces implémentées doit alors figurer
après le mot-clé implements placé dans la déclaration de classe,
en séparant chaque interface par une virgule.
Classe abstraite