Principe de l’héritage
Besoins : éviter de dupliquer du code (attributs et méthodes) dans différentes classes qui partagent des caractéristiques communes o facilite les modifications futures => elles n’ont besoin d’être faites qu’à un seul endroit o représentation explicite d’une logique d’héritage des concepts du domaine (relation “est-un”)
Le mot-clé “extends”
Exemple simple et héritage des attributs
Pour la gestion d’une bibliothèque on nous demande d’écrire une application traitant des documents de nature diverse : des livres, des revues, des dictionnaires, etc. Les livres, à leur tour, peuvent être des romans ou des manuels.
Tous les documents ont un numéro d’enregistrement (un entier) et un titre (une chaîne de caractères). Les livres ont, en plus, un auteur (une chaîne) et un nombre de pages (un entier). Les romans ont éventuellement un prix littéraire (un entier conventionnel, parmi : GONCOURT, MEDICIS, INTERALLIE, etc.), tandis que les manuels ont un niveau scolaire (un entier). Les revues ont un mois et une année (des entiers) et les dictionnaires ont une langue (une chaîne de caractères convenue, comme « anglais », « allemand », « espagnol », etc.).
Tous les objets en question ici (livres, revues, dictionnaires, romans, etc.) doivent pouvoir être manipulées en tant que documents.
=> Schéma des classes => ATTENTION : Il faut vérifier la logique de votre schéma notamment qu’il est possible de dire par exemple un “Roman” est-un “Livre” => Déclaration en Java des classes
=> ATTENTION : ne pas redéclarer les attributs hérités dans les sous-classes !
=> Allocation des objets dans la mémoire : allocation automatique des attributs hérités class Document { int no ; String titre ; }
class Livre extends Document { String auteur ; int nbPages ; }
class Roman extends Livre { int prixLitteraire ; }
class Revue extends Document { int mois ; int annee ; } class Test { public static void main (String args[]) { Document d = new Document (); d.no = 1 ; Livre l = new Livre (); l.no = 2 ; l.auteur = « Hugo »; d.auteur = « Balzac »; => ERREUR DE COMPIL! } }
Vocabulaire : classe-mère / super-classe : ……………………………………………………………..
sous-classe / classe dérivée : …………………………………………………………….
La classe …………… étend / hérite de la classe …………………………………
Hiérarchie des classes du JDK parcourir l’arborescence des classes dans la javadoc : “tree” la classe mère de toutes les classes en Java est : …………………;
Héritage des méthodes But : réutilisation des fonctionnalités de la classe héritée Exemple o Forme : attributs : x, y, couleur methode afficher () o Cercle attribut spécifique : ………. o Main () : création d’une forme et d’un cercle, affichage des attributs
Redéfinition de méthodes dans les sous-classes..
POLYMORPHISM
But de l’héritage : réutilisation des fonctionnalités d’une classe tout en apportant certaines variations, spécifiques de l’objet
Exemple : o Redéfinition de la méthode afficher() dans la classe Cercle o Main () : appel de afficher
class Forme { int x ;
int y ; int couleur ;
void afficher () { System.out.println (« x = » + x + » , y = » + y + « , couleur = » + couleur); } }
class Cercle extends Forme { int rayon ; void afficher () { System.out.println (« x = » + x + » , y = » + y + « , couleur = » + couleur + « , rayon = » + rayon); } }
class Test { public static void main (String args[]) { Forme f ; f = new Cercle (); f.x = 40 ; f.y = 15 ; f.afficher (); } }