You are on page 1of 127

La programmation orient´ee objets

et le langage Java

Master BBSG 2
Laurent Tichit
D´epartement Informatique et Interactions, Facult´e des Sciences de Luminy

Cours 3: L’h´eritage

L.
c Tichit, 2015-2016 POO et Java 1/1

L’h´
eritage

H´eritage : la probl´ematique

Une classe est extension d’une autre (r´eutilisation)

Point
Pixel

L.
c Tichit, 2015-2016 POO et Java 2/1

L’h´
eritage

H´eritage : la probl´ematique

Une classe est extension d’une autre (r´eutilisation)

Point
Point
Pixel étend

Pixel

L.
c Tichit, 2015-2016 POO et Java 2/1

c Tichit. L’h´ eritage H´eritage : la probl´ematique Une classe est extension d’une autre (r´eutilisation) Point Point Pixel étend Pixel Plusieurs classes ont une partie commune (abstraction) Cercle Carré L. 2015-2016 POO et Java 2/1 .

c Tichit. 2015-2016 POO et Java 2/1 . L’h´ eritage H´eritage : la probl´ematique Une classe est extension d’une autre (r´eutilisation) Point Point Pixel étend Pixel Plusieurs classes ont une partie commune (abstraction) Objet Graphique Cercle Carré étend étend Cercle Carré L.

c Tichit. L’h´ eritage H´eritage m´ ecanisme pour d´ efinir une nouvelle classe comme extension d’une classe pr´ eexistante L. 2015-2016 POO et Java 3/1 .

c Tichit. 2015-2016 POO et Java 3/1 . L’h´ eritage H´eritage m´ ecanisme pour d´ efinir une nouvelle classe comme extension d’une classe pr´ eexistante tous les membres de la classe pr´ eexistante sont membres de la nouvelle classe L.

} L..java public class Point { int x.. void placer(int a. y. y = b. L’h´ eritage H´eritage m´ ecanisme pour d´ efinir une nouvelle classe comme extension d’une classe pr´ eexistante tous les membres de la classe pr´ eexistante sont membres de la nouvelle classe Fichier Point. } . int b) { x = a. 2015-2016 POO et Java 3/1 . c Tichit.

} L. y..java public class Pixel extends Point { Color couleur. } Fichier Pixel.. L’h´ eritage H´eritage m´ ecanisme pour d´ efinir une nouvelle classe comme extension d’une classe pr´ eexistante tous les membres de la classe pr´ eexistante sont membres de la nouvelle classe Fichier Point..java public class Point { int x. int b) { x = a.. void placer(int a. y = b. c Tichit. } . 2015-2016 POO et Java 3/1 . void colorier(Color c) { couleur = c. } .

. } ...java un objet Point public class Point { int x. y = b. 10 x void placer(int a.. } 10 x 20 y red couleur Fichier Pixel. } L.red). y. int b) { 20 y x = a. 20).java public class Pixel extends Point { Color couleur. } un objet Pixel . couleur = c. c Tichit.placer(10.colorier(Color. 2015-2016 POO et Java 3/1 . L’h´ eritage H´eritage m´ ecanisme pour d´ efinir une nouvelle classe comme extension d’une classe pr´ eexistante tous les membres de la classe pr´ eexistante sont membres de la nouvelle classe Fichier Point. pix. void colorier(Color c) { pix. Pixel pix = new Pixel().

un peu de jargon Point x y placer(int.. L. relation extends « un Pixel est une sorte de Point » Pixel couleur colorier(Color) la sous-classe toString() . c Tichit. L’h´ eritage H´eritage..int) la super-classe distance(Point) toString() .. 2015-2016 POO et Java 4/1 ..

. 2015-2016 POO et Java 4/1 . c Tichit.int) la super-classe distance(Point) toString() Pas de contrainte-surprise : . L. L’h´ eritage H´eritage. un peu de jargon Point x y placer(int.. la super-classe n’a pas ` a ˆetre ni dans le mˆeme package relation extends ni dans le mˆeme dossier « un Pixel est une ni disponible sous forme de sorte de Point » source Pixel couleur colorier(Color) la sous-classe toString() ...

2015-2016 POO et Java 5/1 ... c Tichit. un objet de la sous-classe sait le faire aussi. de l’´etat : les objets de la sous-classe poss`edent tous les membres de la super-classe du comportement : tout ce qu’un objet de la super-classe sait faire. L’h´ eritage H´eritage. L.

c Tichit. initialisation de ces variables } .p. int dy = y . Point point1. point2. un objet de la sous-classe sait le faire aussi. 2015-2016 POO et Java 5/1 .. .sqrt(dx * dx + dy * dy)..java exemple. de l’´etat : les objets de la sous-classe poss`edent tous les membres de la super-classe du comportement : tout ce qu’un objet de la super-classe sait faire. } ces expressions sont l´egitimes : point1..y. Fichier Point. int dx = x .distance(point2) Fichier Pixel.. y.x.java class Pixel extends Point { Color couleur. avec class Point { int x.p. L’h´ eritage H´eritage. return Math.. } L.. pixel2. double distance(Point p) { Pixel pixel1.

y. } ces expressions sont l´egitimes : point1.. avec class Point { int x. pixel2. int dy = y . de l’´etat : les objets de la sous-classe poss`edent tous les membres de la super-classe du comportement : tout ce qu’un objet de la super-classe sait faire. Fichier Point. c Tichit.x. Point point1.. point2. 2015-2016 POO et Java 5/1 ..y.sqrt(dx * dx + dy * dy)..distance(point2) class Pixel extends Point { Color couleur.p.. initialisation de ces variables } . . L’h´ eritage H´eritage. un objet de la sous-classe sait le faire aussi. } L. int dx = x . return Math..java pixel1.distance(point2) Fichier Pixel.java exemple. double distance(Point p) { Pixel pixel1.p.

point1.distance(pixel2) .y.java pixel1. double distance(Point p) { Pixel pixel1. avec class Point { int x. y.distance(point2) class Pixel extends Point { Color couleur. int dy = y . int dx = x ..distance(point2) Fichier Pixel.p.x. c Tichit..... Fichier Point. pixel2. Point point1. un objet de la sous-classe sait le faire aussi. de l’´etat : les objets de la sous-classe poss`edent tous les membres de la super-classe du comportement : tout ce qu’un objet de la super-classe sait faire.sqrt(dx * dx + dy * dy).java exemple. point2. return Math. } L. L’h´ eritage H´eritage. initialisation de ces variables } .. } ces expressions sont l´egitimes : point1.p. 2015-2016 POO et Java 5/1 .

L’h´ eritage H´eritage.. } ces expressions sont l´egitimes : point1. int dx = x . int dy = y . Point point1.y. pixel1..java exemple. double distance(Point p) { Pixel pixel1.distance(pixel2) L.java pixel1.. c Tichit.. y. point1.. initialisation de ces variables } . un objet de la sous-classe sait le faire aussi.distance(pixel2) } .distance(point2) Fichier Pixel. avec class Point { int x.p.x.sqrt(dx * dx + dy * dy).distance(point2) class Pixel extends Point { Color couleur.p. 2015-2016 POO et Java 5/1 . Fichier Point. point2. de l’´etat : les objets de la sous-classe poss`edent tous les membres de la super-classe du comportement : tout ce qu’un objet de la super-classe sait faire. return Math. pixel2..

2015-2016 POO et Java 6/1 . c Tichit. L’h´ eritage H´eritage et constructeur un Point x y couleur un Pixel la construction d’une instance de la sous-classe commence par la construction de sa partie h´erit´ee L.

pour initialiser un Pixel il faut commencer par l’initialiser en tant que Point L. c Tichit. 2015-2016 POO et Java 6/1 . L’h´ eritage H´eritage et constructeur un Point x y couleur un Pixel la construction d’une instance de la sous-classe commence par la construction de sa partie h´erit´ee en clair : qu’on le veuille ou non.

2015-2016 POO et Java 6/1 . L’h´ eritage H´eritage et constructeur un Point x y couleur un Pixel la construction d’une instance de la sous-classe commence par la construction de sa partie h´erit´ee en clair : qu’on le veuille ou non. javac ins`ere au d´ebut de chaque constructeur de la sous-classe un appel du constructeur sans argument de la super-classe L. pour initialiser un Pixel il faut commencer par l’initialiser en tant que Point si on ne fait rien. c Tichit.

javac ins`ere au d´ebut de chaque constructeur de la sous-classe un appel du constructeur sans argument de la super-classe probl`eme : et si un tel constructeur n’existe pas ? L. L’h´ eritage H´eritage et constructeur un Point x y couleur un Pixel la construction d’une instance de la sous-classe commence par la construction de sa partie h´erit´ee en clair : qu’on le veuille ou non. pour initialiser un Pixel il faut commencer par l’initialiser en tant que Point si on ne fait rien. 2015-2016 POO et Java 6/1 . c Tichit.

. int b. } .java erron´ e class Pixel extends Point { Color couleur. c Tichit. } le constructeur Point() existe-t-il ? L. couleur = c.. y = b. 2015-2016 POO et Java 7/1 . Pixel(int a. Color c) { ici se cache un appel implicite de Point() x = a. L’h´ eritage H´eritage et constructeur Constructeur probl´ ematique : Fichier Pixel.

} . c Tichit. } le constructeur Point() existe-t-il ? si Point() existe.. Pixel(int a. couleur = c. 2015-2016 POO et Java 7/1 .java erron´ e class Pixel extends Point { Color couleur. int b. y = b.. Color c) { ici se cache un appel implicite de Point() x = a. L’h´ eritage H´eritage et constructeur Constructeur probl´ ematique : Fichier Pixel. x et y sont-ils accessibles dans Pixel ? (probablement non) L.

. couleur = c. Pixel(int a. 2015-2016 POO et Java 7/1 . } le constructeur Point() existe-t-il ? si Point() existe. y = b. puisque tout de suite apr` es ont leur affecte d’autres valeurs L. L’h´ eritage H´eritage et constructeur Constructeur probl´ ematique : Fichier Pixel. } .java erron´ e class Pixel extends Point { Color couleur.. Color c) { ici se cache un appel implicite de Point() x = a. int b. il est maladroit de les initialiser pour rien. x et y sont-ils accessibles dans Pixel ? (probablement non) mˆeme si Point() existe et x et y sont accessibles. c Tichit.

2015-2016 POO et Java 8/1 . b)... Color c) { super(a. } . Pixel(int a. couleur = c. c Tichit. } L. int b.java class Pixel extends Point { Color couleur. L’h´ eritage H´eritage et constructeur La solution : Fichier Pixel.

c Tichit. } cela se lit :  pour initialiser un Pixel avec a. L’h´ eritage H´eritage et constructeur La solution : Fichier Pixel. 2015-2016 POO et Java 8/1 . b et c. Pixel(int a.. commencez par l’initialiser en tant que Point avec a et b.java class Pixel extends Point { Color couleur. couleur = c. Color c) { super(a. puis donnez ` a couleur la valeur c  L. int b. } . b)..

b et c.java class Pixel extends Point { Color couleur. c Tichit. couleur = c... int b. } cela se lit :  pour initialiser un Pixel avec a. doit ˆ etre la premi` ere instruction d’un constructeur L. } . puis donnez ` a couleur la valeur c  l’expression super(.). Color c) { super(a. commencez par l’initialiser en tant que Point avec a et b.. L’h´ eritage H´eritage et constructeur La solution : Fichier Pixel. b).. Pixel(int a. 2015-2016 POO et Java 8/1 .

c Tichit. L’h´ eritage H´eritage et droits d’acc`es protected : permission interm´ ediaire entre private et public id´ ee : l’auteur d’une sous-classe a plus de droits que le commun des mortels L. 2015-2016 POO et Java 9/1 .

)..java class Meuble { protected Meuble(. 2015-2016 POO et Java 9/1 .... c Tichit.. } Meuble ....... L’h´ eritage H´eritage et droits d’acc`es protected : permission interm´ ediaire entre private et public id´ ee : l’auteur d’une sous-classe a plus de droits que le commun des mortels exemple : le constructeur prot´ eg´ e d’une classe  abstraite  Fichier Meuble..) { . . } . } L...) { Chaise Table super(.java class Chaise extends Meuble { public Chaise(. } Fichier Chaise.

c Tichit. 2015-2016 POO et Java 10 / 1 . L’h´ eritage Surcharge et red´efinition des noms des membres h´eritage : que se passe-t-il si un membre de la super-classe a le mˆeme nom qu’un membre de la sous-classe ? L.

L’h´ eritage Surcharge et red´efinition des noms des membres h´eritage : que se passe-t-il si un membre de la super-classe a le mˆeme nom qu’un membre de la sous-classe ? s’il s’agit d’une variable et une m´ethode. 2015-2016 POO et Java 10 / 1 . ou de deux m´ethodes de signatures diff´erentes ces membres coexistent (c’est le m´ecanisme de la surcharge habituelle) L. c Tichit.

2015-2016 POO et Java 10 / 1 . c Tichit. L’h´ eritage Surcharge et red´efinition des noms des membres h´eritage : que se passe-t-il si un membre de la super-classe a le mˆeme nom qu’un membre de la sous-classe ? s’il s’agit d’une variable et une m´ethode. ou de deux m´ethodes de signatures diff´erentes ces membres coexistent (c’est le m´ecanisme de la surcharge habituelle) s’il s’agit de deux variables ou de deux m´ethodes de mˆeme signature : le membre de la sous-classe masque celui de la super-classe L.

L’h´ eritage Surcharge et red´efinition des noms des membres h´eritage : que se passe-t-il si un membre de la super-classe a le mˆeme nom qu’un membre de la sous-classe ? s’il s’agit d’une variable et une m´ethode. 2015-2016 POO et Java 10 / 1 . ou de deux m´ethodes de signatures diff´erentes ces membres coexistent (c’est le m´ecanisme de la surcharge habituelle) s’il s’agit de deux variables ou de deux m´ethodes de mˆeme signature : le membre de la sous-classe masque celui de la super-classe s’il s’agit de deux variables. c Tichit. c’est g´en´eralement une maladresse L.

L’h´ eritage Surcharge et red´efinition des noms des membres h´eritage : que se passe-t-il si un membre de la super-classe a le mˆeme nom qu’un membre de la sous-classe ? s’il s’agit d’une variable et une m´ethode. c Tichit. 2015-2016 POO et Java 10 / 1 . c’est g´en´eralement une maladresse s’il s’agit de deux m´ethodes de mˆeme signature : on appelle cela une red´efinition de m´ethode et c’est extrˆemement utile L. ou de deux m´ethodes de signatures diff´erentes ces membres coexistent (c’est le m´ecanisme de la surcharge habituelle) s’il s’agit de deux variables ou de deux m´ethodes de mˆeme signature : le membre de la sous-classe masque celui de la super-classe s’il s’agit de deux variables.

2015-2016 POO et Java 11 / 1 . c Tichit. L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible L.

c Tichit.. 2015-2016 POO et Java 11 / 1 . L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111.. . } L.

.. L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111.. } L. . c Tichit... } class Alimentation extends Article { int code = 222. 2015-2016 POO et Java 11 / 1 .

.. .. L.. . L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111.. c Tichit. } class Alimentation extends Article { int code = 222. 2015-2016 POO et Java 11 / 1 . } class RayonFrais extends Alimentation { int code = 333.. .

..out. } class RayonFrais extends Alimentation { int code = 333. . . // ceci ´ ecrit 333 L... c Tichit. . L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111. void test() { System. 2015-2016 POO et Java 11 / 1 ..println( code ).. } class Alimentation extends Article { int code = 222.

.code ). . . 2015-2016 POO et Java 11 / 1 . c Tichit. } class RayonFrais extends Alimentation { int code = 333.println( super. .. } class Alimentation extends Article { int code = 222. L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111.println( code ). // ceci ´ ecrit 222 L. // ceci ´ ecrit 333 System.out..out.... void test() { System.

.out..out. // ceci ´ ecrit 222 L.. L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111. // ceci ´ ecrit 333 System. 2015-2016 POO et Java 11 / 1 . .. .println( super.. } class Alimentation extends Article { int code = 222.code ). } class RayonFrais extends Alimentation { int code = 333. c Tichit.println( this.code ). void test() { System...

.println( ((Article) this).. } class Alimentation extends Article { int code = 222.. void test() { System.code ).out.println( this. ... // ceci ´ ecrit 111 } } L. c Tichit.println( super.code ). . // ceci ´ ecrit 333 System.code ). } class RayonFrais extends Alimentation { int code = 333.out. L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111. // ceci ´ ecrit 222 System. . 2015-2016 POO et Java 11 / 1 .out..

..out.println( super. . c Tichit.code ). void test() { System. } class RayonFrais extends Alimentation { int code = 333. // ceci ´ ecrit 333 System.println( ((Article) this).out.. . // ceci ´ ecrit 222 System.. . 2015-2016 POO et Java 11 / 1 . L’h´ eritage Masquage de variables membres Pour les variables masquer n’est pas rendre inaccessible exemple (peu utile !) : class Article { int code = 111. } class Alimentation extends Article { int code = 222.code ). // ceci ´ ecrit 111 } } il faut chercher ` a´eviter de telles situations si malcommodes (les variables peuvent avoir des noms plus significatifs !) L.println( this..out.code )..

.. c Tichit. int dy) { changement de la position du point } } class Pixel extends Point { .. void deplacer(Color k) { changement de la couleur du pixel } } L.. void deplacer(int dx. 2015-2016 POO et Java 12 / 1 . L’h´ eritage Cas des m´ethodes : la surcharge class Point { .

. 2015-2016 POO et Java 12 / 1 . c Tichit. int dy) { changement de la position du point } } class Pixel extends Point { .deplacer(u.. appel de deplacer h´ erit´ ee de Point .. void deplacer(int dx. L’h´ eritage Cas des m´ethodes : la surcharge class Point { .. appel de deplacer d´ efinie dans Pixel L.deplacer(w).)... pix..... v). void deplacer(Color k) { changement de la couleur du pixel } } Pixel pix = new Pixel(. pix. .

L’h´ eritage Cas des m´ethodes : la red´efinition si une m´ethode de la sous-classe a la mˆeme signature (nom et arguments) qu’une m´ethode de la super-classe : la m´ethode est red´efinie L. 2015-2016 POO et Java 13 / 1 . c Tichit.

certaines m´ethodes de la super-classe y ont une version raffin´ee L. c Tichit. 2015-2016 POO et Java 13 / 1 . L’h´ eritage Cas des m´ethodes : la red´efinition si une m´ethode de la sous-classe a la mˆeme signature (nom et arguments) qu’une m´ethode de la super-classe : la m´ethode est red´efinie justification : puisque la sous-classe raffine la super-classe.

2015-2016 POO et Java 13 / 1 . certaines m´ethodes de la super-classe y ont une version raffin´ee ou : les objets de la sous-classe savent faire tout ce que savent faire les objets de la super-classe. mais dans certains cas ils le font  mieux  L. L’h´ eritage Cas des m´ethodes : la red´efinition si une m´ethode de la sous-classe a la mˆeme signature (nom et arguments) qu’une m´ethode de la super-classe : la m´ethode est red´efinie justification : puisque la sous-classe raffine la super-classe. c Tichit.

20)-red" L.20)" toString pour un Pixel : "(10. certaines m´ethodes de la super-classe y ont une version raffin´ee ou : les objets de la sous-classe savent faire tout ce que savent faire les objets de la super-classe. L’h´ eritage Cas des m´ethodes : la red´efinition si une m´ethode de la sous-classe a la mˆeme signature (nom et arguments) qu’une m´ethode de la super-classe : la m´ethode est red´efinie justification : puisque la sous-classe raffine la super-classe. mais dans certains cas ils le font  mieux  exemple (un peu banal) : toString pour un Point : "(10. c Tichit. 2015-2016 POO et Java 13 / 1 .

" + y + ")".. c Tichit. chaˆıne : } "(10. y.20)" public String toString() { return "(" + x + ".java class Pixel extends Point { private Color couleur.. 2015-2016 POO et Java 14 / 1 .java class Point { Un point sous forme de private int x.20)-red" Fichier Pixel... public String toString() { return "(" + x + ". L’h´ eritage Cas des m´ethodes : la red´efinition Fichier Point. } Un pixel sous forme de ." + y + ")-" + couleur. chaˆıne : .. .. . "(10. Erreur : } x et y sont priv´ es... } L.

" + y + ")-" + couleur..java class Pixel extends Point { Cela passe." + y + ")"..20)-red" Fichier Pixel. Un pixel sous forme de } chaˆıne : ... L’h´ eritage Cas des m´ethodes : la red´efinition Fichier Point. la classe Point } L. c Tichit. 2015-2016 POO et Java 15 / 1 . } "(10. mais c’est private Color couleur.java Un point sous forme de class Point { protected int x. d´ etails internes de } . public String toString() { Pixel s’appuie sur des return "(" + x + "..20)" public String toString() { return "(" + x + ". y... "(10. chaˆıne : . mal con¸cu : la classe ..

. . } L.. y." + y + ")". 2015-2016 POO et Java 16 / 1 . } La bonne solution ..toString() + "-" + couleur.20)-red" Fichier Pixel.20)" return "(" + x + ". Un point sous forme de . L’h´ eritage Cas des m´ethodes : la red´efinition Fichier Point.. } Un pixel sous forme de . chaˆıne : public String toString() { "(10.java class Pixel extends Point { private Color couleur.. public String toString() { return super. } chaˆıne : "(10... c Tichit..java class Point { private int x.

c Tichit. L’h´ eritage L’arbre des classes Il existe une classe. qui n’a pas de super-classe Certaines classes ont une super-classe explicite Les classes sans super-classe explicite ont Object pour super-classe L’ensemble des classes est organis´e en une arborescence de racine Object Object Point Number String Pixel Integer Float Mais qu’y a-t-il dans la classe Object ? L. 2015-2016 POO et Java 17 / 1 . nomm´ee Object.

a et b ne sont pas les noms de deux objets. Point b = a. mais deux noms pour le mˆ eme objet : a b 10 20 x y L. c Tichit. 20). 2015-2016 POO et Java 18 / 1 . L’h´ eritage (Rappel : affectation et comparaison des objets) l’affectation  a = b  d’un objet n’en fait pas une copie Point a = new Point(10.

c Tichit. a b c 10 20 10 20 x y x y L. a et b ne sont pas les noms de deux objets. 2015-2016 POO et Java 18 / 1 . mais deux noms pour le mˆ eme objet : a b 10 20 x y pour avoir une vraie duplication : Point c = (Point) a.clone(). Point b = a. 20). L’h´ eritage (Rappel : affectation et comparaison des objets) l’affectation  a = b  d’un objet n’en fait pas une copie Point a = new Point(10.

mais  a et b sont le mˆ eme objet  : a b c 10 20 10 20 x y x y a == b vaut true a == c vaut false L. 2015-2016 POO et Java 19 / 1 . L’h´ eritage (Rappel : affectation et comparaison des objets) de mˆeme. c Tichit.  a == b  ne signifie pas  a est ´ egal ` a b .

c Tichit. mais  a et b sont le mˆ eme objet  : a b c 10 20 10 20 x y x y a == b vaut true a == c vaut false pour avoir une comparaison des valeurs : a. L’h´ eritage (Rappel : affectation et comparaison des objets) de mˆeme.equals(b) vaut true a.  a == b  ne signifie pas  a est ´ egal ` a b .equals(c) vaut true // si la classe Point a ´ et´ e bien programm´ ee L. 2015-2016 POO et Java 19 / 1 .

c Tichit. 2015-2016 POO et Java 20 / 1 . L’h´ eritage Qu’y a-t-il dans la classe Object ? R´eponse ´evidente : le comportement commun ` a tous les objets : L.

L’h´ eritage Qu’y a-t-il dans la classe Object ? R´eponse ´evidente : le comportement commun ` a tous les objets : String toString() : expression de l’objet sous forme de chaˆıne de caract`eres par d´efaut : classe@adresse . exemple : Point@18d107f L. 2015-2016 POO et Java 20 / 1 . c Tichit.

L’h´ eritage Qu’y a-t-il dans la classe Object ? R´eponse ´evidente : le comportement commun ` a tous les objets : String toString() : expression de l’objet sous forme de chaˆıne de caract`eres par d´efaut : classe@adresse . exemple : Point@18d107f Object clone() : renvoie un clone (duplicata) de l’objet par d´efaut : copie  ` a un niveau  (duplication de l’objet mais non de ses membres) L. c Tichit. 2015-2016 POO et Java 20 / 1 .

c Tichit. exemple : Point@18d107f Object clone() : renvoie un clone (duplicata) de l’objet par d´efaut : copie  ` a un niveau  (duplication de l’objet mais non de ses membres) equals(Object o) : compare les valeurs de deux objets : a. 2015-2016 POO et Java 20 / 1 .equals(b) ⇔ la valeur de a est ´egale ` a celle de b par d´efaut : a.equals(b) ⇔ a == b L. L’h´ eritage Qu’y a-t-il dans la classe Object ? R´eponse ´evidente : le comportement commun ` a tous les objets : String toString() : expression de l’objet sous forme de chaˆıne de caract`eres par d´efaut : classe@adresse .

2015-2016 POO et Java 20 / 1 .getClass() == b.getClass() ⇔ a et b sont de mˆeme type L. L’h´ eritage Qu’y a-t-il dans la classe Object ? R´eponse ´evidente : le comportement commun ` a tous les objets : String toString() : expression de l’objet sous forme de chaˆıne de caract`eres par d´efaut : classe@adresse .equals(b) ⇔ la valeur de a est ´egale ` a celle de b par d´efaut : a. c Tichit. exemple : Point@18d107f Object clone() : renvoie un clone (duplicata) de l’objet par d´efaut : copie  ` a un niveau  (duplication de l’objet mais non de ses membres) equals(Object o) : compare les valeurs de deux objets : a.equals(b) ⇔ a == b Class getClass() : renvoie la classe de l’objet a.

c Tichit. L’h´ eritage Op´erateur instanceof unObjet instanceof uneClasse signifie : unObjet est-il instance de [une sous-classe de] uneClasse ? c’est-` a-dire : unObjet est-il une sorte de uneClasse ? L. 2015-2016 POO et Java 21 / 1 .

L’h´
eritage

Op´erateur instanceof

unObjet instanceof uneClasse
signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
c’est-`
a-dire : unObjet est-il une sorte de uneClasse ?
application : red´
efinition de la m´
ethode equals

Fichier Point.java
class Point {
private int x, y;
...
public boolean equals(Point p) {
return p.x == x && p.y == y;
}
...
}

L.
c Tichit, 2015-2016 POO et Java 21 / 1

L’h´
eritage

Op´erateur instanceof

unObjet instanceof uneClasse
signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
c’est-`
a-dire : unObjet est-il une sorte de uneClasse ?
application : red´
efinition de la m´
ethode equals

Fichier Point.java
class Point {
private int x, y;
... Erreur ! Cette m´
ethode
public boolean equals(Point p) { est correcte, mais elle
return p.x == x && p.y == y; n’est pas une
} red´
efinition de
... equals(Object p)
}

L.
c Tichit, 2015-2016 POO et Java 21 / 1

L’h´
eritage

Op´erateur instanceof

unObjet instanceof uneClasse
signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
c’est-`
a-dire : unObjet est-il une sorte de uneClasse ?
application : red´
efinition de la m´
ethode equals

Fichier Point.java
class Point {
private int x, y;
...
public boolean equals(Object p) {
return p instanceof Point && La premi` ere condition
((Point)p).x == x && ((Point)p).y == y; justifie les deux
} changements de type
}

L.
c Tichit, 2015-2016 POO et Java 22 / 1

2015-2016 POO et Java 23 / 1 . regrettable car cela brouille le discours (deux poids. deux mesures) de nombreux outils ne sont d´efinis que pour les objets L. c Tichit. L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes .

L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes . 2015-2016 POO et Java 23 / 1 . c Tichit. deux mesures) de nombreux outils ne sont d´efinis que pour les objets les classes-enveloppes permettent de  d´eguiser en objets  les valeurs de types primitifs : Byte Float Short Double Integer Character Long Boolean L. regrettable car cela brouille le discours (deux poids.

deux mesures) de nombreux outils ne sont d´efinis que pour les objets les classes-enveloppes permettent de  d´eguiser en objets  les valeurs de types primitifs : Byte Float Short Double Integer Character Long Boolean principaux membres (par exemple. 2015-2016 POO et Java 23 / 1 . pour Integer) emballage : unInteger = new Integer(unInt). L. L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes . c Tichit. regrettable car cela brouille le discours (deux poids.

2015-2016 POO et Java 23 / 1 . regrettable car cela brouille le discours (deux poids.intValue(). deux mesures) de nombreux outils ne sont d´efinis que pour les objets les classes-enveloppes permettent de  d´eguiser en objets  les valeurs de types primitifs : Byte Float Short Double Integer Character Long Boolean principaux membres (par exemple. c Tichit. L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes . L. d´eballage : unInt = unInteger. pour Integer) emballage : unInteger = new Integer(unInt).

2015-2016 POO et Java 23 / 1 . deux mesures) de nombreux outils ne sont d´efinis que pour les objets les classes-enveloppes permettent de  d´eguiser en objets  les valeurs de types primitifs : Byte Float Short Double Integer Character Long Boolean principaux membres (par exemple. c Tichit. des utilitaires : unInt = Integer.parseInt(uneChaˆıne). d´eballage : unInt = unInteger. L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes . regrettable car cela brouille le discours (deux poids. L. pour Integer) emballage : unInteger = new Integer(unInt).intValue().

regrettable car cela brouille le discours (deux poids. L. d´eballage : unInt = unInteger. c Tichit. L’h´ eritage Classes-enveloppes des types primitifs les types primitifs ne sont pas dans l’arbre des classes . pour Integer) emballage : unInteger = new Integer(unInt). des utilitaires : unInt = Integer. emballage et d´eballage sont devenus automatiques.intValue().parseInt(uneChaˆıne). deux mesures) de nombreux outils ne sont d´efinis que pour les objets les classes-enveloppes permettent de  d´eguiser en objets  les valeurs de types primitifs : Byte Float Short Double Integer Character Long Boolean principaux membres (par exemple. ` a partir de Java 5. 2015-2016 POO et Java 23 / 1 .

c Tichit. L’h´ eritage Polymorphisme notion qui apparaˆıt ` a plusieurs endroits de la POO ici : polymorphisme = un objet peut apparaˆıtre sous divers types L. 2015-2016 POO et Java 24 / 1 .

L’h´ eritage Polymorphisme notion qui apparaˆıt ` a plusieurs endroits de la POO ici : polymorphisme = un objet peut apparaˆıtre sous divers types pour commencer. c Tichit. 2015-2016 POO et Java 24 / 1 . la g´en´eralisation : un objet peut apparaˆıtre sous un type plus g´en´eral que le sien : L.

c Tichit. L’h´ eritage Polymorphisme notion qui apparaˆıt ` a plusieurs endroits de la POO ici : polymorphisme = un objet peut apparaˆıtre sous divers types pour commencer. la g´en´eralisation : un objet peut apparaˆıtre sous un type plus g´en´eral que le sien : la classe Pixel est sous-classe de Point L. 2015-2016 POO et Java 24 / 1 .

2015-2016 POO et Java 24 / 1 . L’h´ eritage Polymorphisme notion qui apparaˆıt ` a plusieurs endroits de la POO ici : polymorphisme = un objet peut apparaˆıtre sous divers types pour commencer. donc tout ce qu’a un Point un Pixel l’a aussi L. la g´en´eralisation : un objet peut apparaˆıtre sous un type plus g´en´eral que le sien : la classe Pixel est sous-classe de Point. c Tichit.

L’h´
eritage

Polymorphisme

notion qui apparaˆıt `
a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparaˆıtre sous divers types
pour commencer, la g´en´eralisation : un objet peut apparaˆıtre sous un type plus
g´en´eral que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qu’a un Point un Pixel l’a aussi
tout ce qu’on peut demander ` a un Point on peut le demander aussi `
a un
Pixel

L.
c Tichit, 2015-2016 POO et Java 24 / 1

L’h´
eritage

Polymorphisme

notion qui apparaˆıt `
a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparaˆıtre sous divers types
pour commencer, la g´en´eralisation : un objet peut apparaˆıtre sous un type plus
g´en´eral que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qu’a un Point un Pixel l’a aussi
tout ce qu’on peut demander ` a un Point on peut le demander aussi `
a un
Pixel, donc
l`
a o`
u un Point est attendu, on peut mettre un Pixel

L.
c Tichit, 2015-2016 POO et Java 24 / 1

L’h´
eritage

Polymorphisme

notion qui apparaˆıt `
a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparaˆıtre sous divers types
pour commencer, la g´en´eralisation : un objet peut apparaˆıtre sous un type plus
g´en´eral que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qu’a un Point un Pixel l’a aussi
tout ce qu’on peut demander ` a un Point on peut le demander aussi `
a un
Pixel, donc
l`
a o`
u un Point est attendu, on peut mettre un Pixel
aussi longtemps que cela durera, le Pixel sera vu comme un Point

L.
c Tichit, 2015-2016 POO et Java 24 / 1

L’h´ eritage G´en´eralisation une m´ ethode  attendant  un point static void unTraitement(Point pt) { . b). 2015-2016 POO et Java 25 / 1 . /* la valeur de pt est un Point */ .. .. pt. c Tichit....placer(a. } L..

pink). .. . L’h´ eritage G´en´eralisation une m´ ethode  attendant  un point static void unTraitement(Point pt) { . Pixel pix = new Pixel(10..placer(a.... pt. . b). 2015-2016 POO et Java 25 / 1 . 20........ L. /* la valeur de pt est un Point */ . c Tichit. unTraitement(pix). } un appel de cette m´ ethode .

. .... .. L’h´ eritage G´en´eralisation une m´ ethode  attendant  un point static void unTraitement(Point pt) { .placer(a... . 2015-2016 POO et Java 25 / 1 . } un appel de cette m´ ethode . pink).. Il vaudrait mieux dire : la valeur /* la valeur de pt est un Point */ de pt est  au moins  un Point ... b). Pixel pix = new Pixel(10. 20... L. pt. c Tichit. unTraitement(pix).

Color. pix x y couleur L.. b. 2015-2016 POO et Java 26 / 1 . L’h´ eritage G´en´eralisation La g´en´eralisation est une op´eration sans travail : Pixel pix = new Pixel(a.green). c Tichit. ..

. L. . Color..green).. 2015-2016 POO et Java 26 / 1 . L’h´ eritage G´en´eralisation La g´en´eralisation est une op´eration sans travail : Pixel pix = new Pixel(a. c Tichit.. b.. pix x y couleur Point pt = pix.

pix pt x y couleur L. .. 2015-2016 POO et Java 26 / 1 .green). pix x y couleur Point pt = pix.. L’h´ eritage G´en´eralisation La g´en´eralisation est une op´eration sans travail : Pixel pix = new Pixel(a. . Color. b. c Tichit...

2015-2016 POO et Java 27 / 1 . c Tichit. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e L.

2015-2016 POO et Java 27 / 1 . c Tichit. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e alors que la g´ en´ eralisation est toujours l´ egitime et implicite L.

2015-2016 POO et Java 27 / 1 . la particularisation doit ˆetre explicite (par un changement de type) L. c Tichit. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e alors que la g´ en´ eralisation est toujours l´ egitime et implicite.

la particularisation doit ˆetre explicite (par un changement de type) est sous la responsabilit´e du programmeur L. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e alors que la g´ en´ eralisation est toujours l´ egitime et implicite. 2015-2016 POO et Java 27 / 1 . c Tichit.

la particularisation doit ˆetre explicite (par un changement de type) est sous la responsabilit´e du programmeur est contrˆol´ee par Java. 2015-2016 POO et Java 27 / 1 . au moins ` a l’ex´ecution L. c Tichit. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e alors que la g´ en´ eralisation est toujours l´ egitime et implicite.

Contrˆol´ e par Java lors de Pixel pix = (Pixel) pt. c Tichit. 2015-2016 POO et Java 27 / 1 . pix. au moins ` a l’ex´ecution exemple bien glauque static void unTraitement(Point pt) { . } L.. L’h´ eritage Particularisation op´eration consistant `a voir un objet sous un type plus pr´ ecis (moins g´ en´ eral) que celui sous lequel il apparaˆıt ` a un moment donn´ e alors que la g´ en´ eralisation est toujours l´ egitime et implicite.black. l’ex´ ecution ....couleur = Color. .. la particularisation doit ˆetre explicite (par un changement de type) est sous la responsabilit´e du programmeur est contrˆol´ee par Java..

la particularisation est une op´eration sans travail. c Tichit. 2015-2016 POO et Java 28 / 1 . L’h´ eritage Particularisation Comme la g´en´eralisation. mais  risqu´ee  L.

L’h´ eritage Particularisation Comme la g´en´eralisation. 2015-2016 POO et Java 28 / 1 . mais  risqu´ee  Elle ne peut servir qu’` a donner ` a un objet un type qu’il a d´ej` a L. c Tichit. la particularisation est une op´eration sans travail.

la particularisation est une op´eration sans travail. . L’h´ eritage Particularisation Comme la g´en´eralisation... pt x y L. 2015-2016 POO et Java 28 / 1 . mais  risqu´ee  Elle ne peut servir qu’` a donner ` a un objet un type qu’il a d´ej` a Point pt = new Point(a. b). c Tichit.

. la particularisation est une op´eration sans travail. L’h´ eritage Particularisation Comme la g´en´eralisation. .. pt pix où est la couleur ??? x y L.. b). ERREUR ! . 2015-2016 POO et Java 28 / 1 .. pt x y Pixel pix = (Pixel) pt. mais  risqu´ee  Elle ne peut servir qu’` a donner ` a un objet un type qu’il a d´ej` a Point pt = new Point(a. c Tichit.

exemple : les collections Les collections (classes Collection. 2015-2016 POO et Java 29 / 1 . etc. L’h´ eritage G´en´eralisation et particularisation.) de la biblioth` eque Java sont d´ efinies en toute g´en´ eralit´ e L. List. Set. Vector. c Tichit. Map.

Map. etc. c Tichit. exemple : les collections Les collections (classes Collection. Set. L’h´ eritage G´en´eralisation et particularisation.) de la biblioth` eque Java sont d´ efinies en toute g´en´ eralit´ e leurs ´ el´ ements sont d´ eclar´ es sous le type Object L. List. 2015-2016 POO et Java 29 / 1 . Vector.

} L. Vector. exemple : les collections Les collections (classes Collection. /* Empile l’objet indiqu´ e */ Object pop(). /* Enl` eve l’objet au sommet de la pile et le renvoie */ . etc. Set.. Map. c Tichit. /* Teste si la pile est vide */ void push(Object item). List. 2015-2016 POO et Java 29 / 1 .. L’h´ eritage G´en´eralisation et particularisation.) de la biblioth` eque Java sont d´ efinies en toute g´en´ eralit´ e leurs ´ el´ ements sont d´ eclar´ es sous le type Object exemple : la classe Stack (pile) : public class Stack extends Vector { boolean empty().

les exploite une premi` ere fois en les empilant. L’h´ eritage Exemple : les collections Exemple d’utilisation de la pile : un programme cr´ ee des points. c Tichit. puis une deuxi`eme fois en les d´ epilant L. 2015-2016 POO et Java 30 / 1 .

L’h´ eritage Exemple : les collections Exemple d’utilisation de la pile : un programme cr´ ee des points. L. les exploite une premi` ere fois en les empilant. 2015-2016 POO et Java 30 / 1 . c Tichit. puis une deuxi`eme fois en les d´ epilant d´ eclaration et initialisation de la pile Stack pile = new Stack().

i++) { Point pt = new Point(arguments).push(pt). empilement des points for (int i = 0. puis une deuxi`eme fois en les d´ epilant d´ eclaration et initialisation de la pile Stack pile = new Stack(). L’h´ eritage Exemple : les collections Exemple d’utilisation de la pile : un programme cr´ ee des points. } L. c Tichit. exploitation de pt pile. 2015-2016 POO et Java 30 / 1 . i < n. les exploite une premi` ere fois en les empilant.

L’h´
eritage

Exemple : les collections

Exemple d’utilisation de la pile : un programme cr´ ee des points, les exploite une premi`
ere
fois en les empilant, puis une deuxi`eme fois en les d´
epilant

eclaration et initialisation de la pile
Stack pile = new Stack();
empilement des points
for (int i = 0; i < n; i++) {
Point pt = new Point(arguments);
exploitation de pt
pile.push(pt); ⇐ g´en´
eralisation de pt
}

L.
c Tichit, 2015-2016 POO et Java 30 / 1

L’h´
eritage

Exemple : les collections

Exemple d’utilisation de la pile : un programme cr´ ee des points, les exploite une premi`
ere
fois en les empilant, puis une deuxi`eme fois en les d´
epilant

eclaration et initialisation de la pile
Stack pile = new Stack();
empilement des points
for (int i = 0; i < n; i++) {
Point pt = new Point(arguments);
exploitation de pt
pile.push(pt); ⇐ g´en´
eralisation de pt
}

epilement des points
while (!pile.empty()) {
Point pt = (Point) pile.pop();
exploitation de pt
}

L.
c Tichit, 2015-2016 POO et Java 30 / 1

L’h´
eritage

Exemple : les collections

Exemple d’utilisation de la pile : un programme cr´ ee des points, les exploite une premi`
ere
fois en les empilant, puis une deuxi`eme fois en les d´
epilant

eclaration et initialisation de la pile
Stack pile = new Stack();
empilement des points
for (int i = 0; i < n; i++) {
Point pt = new Point(arguments);
exploitation de pt
pile.push(pt); ⇐ g´en´
eralisation de pt
}

epilement des points
while (!pile.empty()) {
Point pt = (Point) pile.pop(); ⇐ particularisation de pt
exploitation de pt
}

L.
c Tichit, 2015-2016 POO et Java 30 / 1

c Tichit. L’h´ eritage Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } L. 2015-2016 POO et Java 31 / 1 .

c Tichit. L’h´ eritage Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } L. 2015-2016 POO et Java 31 / 1 .

2015-2016 POO et Java 31 / 1 . L’h´ eritage Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } L. c Tichit.

L’h´ eritage Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } class R´esident extends Abonn´ e { les r´ esidents ne payent pas } L. c Tichit. 2015-2016 POO et Java 31 / 1 .

2015-2016 POO et Java 31 / 1 . L. L’h´ eritage Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } class R´esident extends Abonn´ e { les r´ esidents ne payent pas } toutes ces classes d´ efinissent ou red´ efinissent la m´ ethode public void emettreTicket(). c Tichit.

. 2015-2016 POO et Java 32 / 1 .... Abonné emettreTicket() .. L. c Tichit. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() .. Résident emettreTicket() .. Habituel emettreTicket() ..

Abonné emettreTicket() . 2015-2016 POO et Java 32 / 1 .... c Tichit.. L. avec la d´ eclaration : Usager unClient.. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() . Habituel emettreTicket() .... Résident emettreTicket() .

.emettreTicket(). Résident emettreTicket() .... pose deux questions : Abonné cette expression passe-t-elle la compilation ? emettreTicket() . Habituel une expression comme emettreTicket() unClient... L. . 2015-2016 POO et Java 32 / 1 .. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() . c Tichit. avec la d´ eclaration : Usager unClient..

.emettreTicket().. L... Résident emettreTicket() .. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() . car emettreTicket() est membre de la classe Usager .. 2015-2016 POO et Java 32 / 1 . pose deux questions : Abonné cette expression passe-t-elle la compilation ? emettreTicket() Oui. .. avec la d´ eclaration : Usager unClient. c Tichit.. Habituel une expression comme emettreTicket() unClient.

peut-on dire quel sera son effet ` a l’ex´ ecution ? Résident emettreTicket() .. avec la d´ eclaration : Usager unClient..emettreTicket(). c Tichit. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() ... 2015-2016 POO et Java 32 / 1 . . Habituel une expression comme emettreTicket() unClient... L. pose deux questions : Abonné cette expression passe-t-elle la compilation ? emettreTicket() Oui. car emettreTicket() est membre de la classe Usager ...

. L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() ..emettreTicket()... avec la d´ eclaration : Usager unClient. peut-on dire quel sera son effet ` a l’ex´ ecution ? Non.. 2015-2016 POO et Java 32 / 1 . car emettreTicket() est membre de la classe Usager .. . pose deux questions : Abonné cette expression passe-t-elle la compilation ? emettreTicket() Oui. L.. Habituel une expression comme emettreTicket() unClient. . car la m´ethode emettreTicket() ´ etant red´ efinie. c Tichit.. Résident cela d´ ependra de la valeur effective de unClient au emettreTicket() moment de l’appel.

la plus proche du type effectif de unObjet L. A retenir : la m´ethode appel´ee dans unObjet..emettreTicket()..) est toujours la plus  sp´ecialis´ ee  possible...uneMethode(.. peut-on dire quel sera son effet ` a l’ex´ ecution ? Non... L’h´ eritage Polymorphisme et m´ethodes virtuelles Usager emettreTicket() . car la m´ethode emettreTicket() ´ etant red´ efinie..-` a-d.. c Tichit. . Habituel une expression comme emettreTicket() unClient.. . pose deux questions : Abonné cette expression passe-t-elle la compilation ? emettreTicket() Oui. avec la d´ eclaration : Usager unClient. car emettreTicket() est membre de la classe Usager . Résident cela d´ ependra de la valeur effective de unClient au emettreTicket() moment de l’appel. c. 2015-2016 POO et Java 32 / 1 .

2015-2016 POO et Java 33 / 1 . c Tichit. L’h´ eritage Polymorphisme et m´ethodes virtuelles L’exemple magique class ObjetGraphique { public void seDessiner() { .. } } L..

. 2015-2016 POO et Java 33 / 1 . L’h´ eritage Polymorphisme et m´ethodes virtuelles L’exemple magique class ObjetGraphique { public void seDessiner() { .. c Tichit. } } class Triangle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un triangle } } L.

. c Tichit. } } class Triangle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un triangle } } class Cercle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un cercle } } L. L’h´ eritage Polymorphisme et m´ethodes virtuelles L’exemple magique class ObjetGraphique { public void seDessiner() { . 2015-2016 POO et Java 33 / 1 ..

L’h´ eritage Polymorphisme et m´ethodes virtuelles L’exemple magique class ObjetGraphique { public void seDessiner() { . c Tichit.. } } Objet class Triangle extends ObjetGraphique { Graphique public void seDessiner() { op´ erations pour dessiner un triangle } Triangle Cercle } class Cercle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un cercle } Rectangle } class Rectangle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un rectangle } } L. 2015-2016 POO et Java 33 / 1 ..

println("ERREUR").out. L’h´ eritage Polymorphisme et m´ethodes virtuelles L’exemple magique class ObjetGraphique { public void seDessiner() { System. } } Objet class Triangle extends ObjetGraphique { Graphique public void seDessiner() { op´ erations pour dessiner un triangle } Triangle Cercle } class Cercle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un cercle } Rectangle } class Rectangle extends ObjetGraphique { public void seDessiner() { op´ erations pour dessiner un rectangle } } L. c Tichit. 2015-2016 POO et Java 33 / 1 .

c Tichit. L. 2015-2016 POO et Java 34 / 1 . L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n].

2015-2016 POO et Java 34 / 1 .. L. L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n]. Construction image[0] = new Triangle(.).. c Tichit.

Construction image[0] = new Triangle(. image[1] = new Cercle(.. 2015-2016 POO et Java 34 / 1 ..).). L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n].. c Tichit.. L.

L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n]. Construction image[0] = new Triangle(..).. c Tichit.).. . 2015-2016 POO et Java 34 / 1 ..).... L. image[1] = new Cercle(. image[2] = new Rectangle(..

image[1] = new Cercle(.seDessiner().. i++) image[i]....).). i < n. L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n].. image[2] = new Rectangle(. Affichage for (int i = 0... . Construction image[0] = new Triangle(. L..). c Tichit. 2015-2016 POO et Java 34 / 1 .

Affichage for (int i = 0..). c Tichit. L.. image[2] = new Rectangle(..seDessiner(). image[1] = new Cercle(.. i < n. Construction image[0] = new Triangle(.. i++) image[i].)....). L’h´ eritage Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n]. 2015-2016 POO et Java 34 / 1 . .