Vous êtes sur la page 1sur 127

La programmation orientee objets

et le langage Java

Master BBSG 2
Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 3: Lheritage

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

Heritage : la problematique

Une classe est extension dune autre (reutilisation)

Point
Pixel

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

Heritage : la problematique

Une classe est extension dune autre (reutilisation)

Point
Point
Pixel tend

Pixel

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

Heritage : la problematique

Une classe est extension dune autre (reutilisation)

Point
Point
Pixel tend

Pixel

Plusieurs classes ont une partie commune (abstraction)

Cercle Carr

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

Heritage : la problematique

Une classe est extension dune autre (reutilisation)

Point
Point
Pixel tend

Pixel

Plusieurs classes ont une partie commune (abstraction)

Objet
Graphique

Cercle Carr tend tend

Cercle Carr

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

Heritage

m
ecanisme pour d
efinir une nouvelle classe comme extension dune classe pr
eexistante

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

Heritage

m
ecanisme pour d
efinir une nouvelle classe comme extension dune classe pr
eexistante
tous les membres de la classe pr
eexistante sont membres de la nouvelle classe

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

Heritage

m
ecanisme pour d
efinir une nouvelle classe comme extension dune 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, y;
void placer(int a, int b) {
x = a;
y = b;
}
...
}

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

Heritage

m
ecanisme pour d
efinir une nouvelle classe comme extension dune 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, y;
void placer(int a, int b) {
x = a;
y = b;
}
...
}

Fichier Pixel.java
public class Pixel extends Point {
Color couleur;
void colorier(Color c) {
couleur = c;
}
...
}

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

Heritage

m
ecanisme pour d
efinir une nouvelle classe comme extension dune classe pr
eexistante
tous les membres de la classe pr
eexistante sont membres de la nouvelle classe

Fichier Point.java
un objet Point
public class Point {
int x, y; 10 x
void placer(int a, int b) { 20 y
x = a;
y = b;
} un objet Pixel
...
} 10 x
20 y
red couleur
Fichier Pixel.java
public class Pixel extends Point {
Color couleur; Pixel pix = new Pixel();
void colorier(Color c) { pix.placer(10, 20);
couleur = c; pix.colorier(Color.red);
}
...
}

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

Heritage, un peu de jargon

Point
x
y
placer(int,int) la super-classe
distance(Point)
toString()
...

relation extends

un Pixel est une


sorte de Point
Pixel
couleur
colorier(Color) la sous-classe
toString()
...

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

Heritage, un peu de jargon

Point
x
y
placer(int,int) la super-classe
distance(Point)
toString() Pas de contrainte-surprise :
... la super-classe na pas `
a etre
ni dans le meme package
relation extends
ni dans le meme dossier
un Pixel est une ni disponible sous forme de
sorte de Point
source
Pixel
couleur
colorier(Color) la sous-classe
toString()
...

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

Heritage...

de letat : les objets de la sous-classe poss`edent tous les membres de la super-classe


du comportement : tout ce quun objet de la super-classe sait faire,
un objet de la sous-classe sait le faire aussi.

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

Heritage...

de letat : les objets de la sous-classe poss`edent tous les membres de la super-classe


du comportement : tout ce quun objet de la super-classe sait faire,
un objet de la sous-classe sait le faire aussi.

Fichier Point.java
exemple, avec
class Point {
int x, y;
Point point1, point2;
double distance(Point p) { Pixel pixel1, pixel2;
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy); initialisation de ces variables
}
...
} ces expressions sont legitimes :
point1.distance(point2)
Fichier Pixel.java

class Pixel extends Point {


Color couleur;
...
}

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

Heritage...

de letat : les objets de la sous-classe poss`edent tous les membres de la super-classe


du comportement : tout ce quun objet de la super-classe sait faire,
un objet de la sous-classe sait le faire aussi.

Fichier Point.java
exemple, avec
class Point {
int x, y;
Point point1, point2;
double distance(Point p) { Pixel pixel1, pixel2;
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy); initialisation de ces variables
}
...
} ces expressions sont legitimes :
point1.distance(point2)
Fichier Pixel.java
pixel1.distance(point2)
class Pixel extends Point {
Color couleur;
...
}

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

Heritage...

de letat : les objets de la sous-classe poss`edent tous les membres de la super-classe


du comportement : tout ce quun objet de la super-classe sait faire,
un objet de la sous-classe sait le faire aussi.

Fichier Point.java
exemple, avec
class Point {
int x, y;
Point point1, point2;
double distance(Point p) { Pixel pixel1, pixel2;
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy); initialisation de ces variables
}
...
} ces expressions sont legitimes :
point1.distance(point2)
Fichier Pixel.java
pixel1.distance(point2)
class Pixel extends Point {
Color couleur;
point1.distance(pixel2)
...
}

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

Heritage...

de letat : les objets de la sous-classe poss`edent tous les membres de la super-classe


du comportement : tout ce quun objet de la super-classe sait faire,
un objet de la sous-classe sait le faire aussi.

Fichier Point.java
exemple, avec
class Point {
int x, y;
Point point1, point2;
double distance(Point p) { Pixel pixel1, pixel2;
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy); initialisation de ces variables
}
...
} ces expressions sont legitimes :
point1.distance(point2)
Fichier Pixel.java
pixel1.distance(point2)
class Pixel extends Point {
Color couleur;
point1.distance(pixel2)
}
... pixel1.distance(pixel2)

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

Heritage et constructeur

un Point

x y couleur

un Pixel

la construction dune instance de la sous-classe commence par la construction de sa


partie heritee

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

Heritage et constructeur

un Point

x y couleur

un Pixel

la construction dune instance de la sous-classe commence par la construction de sa


partie heritee
en clair : quon le veuille ou non, pour initialiser un Pixel il faut
commencer par linitialiser en tant que Point

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

Heritage et constructeur

un Point

x y couleur

un Pixel

la construction dune instance de la sous-classe commence par la construction de sa


partie heritee
en clair : quon le veuille ou non, pour initialiser un Pixel il faut
commencer par linitialiser en tant que Point
si on ne fait rien, javac ins`ere au debut de chaque constructeur de la sous-classe un
appel du constructeur sans argument de la super-classe

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

Heritage et constructeur

un Point

x y couleur

un Pixel

la construction dune instance de la sous-classe commence par la construction de sa


partie heritee
en clair : quon le veuille ou non, pour initialiser un Pixel il faut
commencer par linitialiser en tant que Point
si on ne fait rien, javac ins`ere au debut de chaque constructeur de la sous-classe un
appel du constructeur sans argument de la super-classe
probl`eme : et si un tel constructeur nexiste pas ?

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

Heritage et constructeur

Constructeur probl
ematique :

Fichier Pixel.java erron


e
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
ici se cache un appel implicite de Point()
x = a;
y = b;
couleur = c;
}
...
}

le constructeur Point() existe-t-il ?

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

Heritage et constructeur

Constructeur probl
ematique :

Fichier Pixel.java erron


e
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
ici se cache un appel implicite de Point()
x = a;
y = b;
couleur = c;
}
...
}

le constructeur Point() existe-t-il ?


si Point() existe, x et y sont-ils accessibles dans Pixel ? (probablement non)

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

Heritage et constructeur

Constructeur probl
ematique :

Fichier Pixel.java erron


e
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
ici se cache un appel implicite de Point()
x = a;
y = b;
couleur = c;
}
...
}

le constructeur Point() existe-t-il ?


si Point() existe, x et y sont-ils accessibles dans Pixel ? (probablement non)
meme si Point() existe et x et y sont accessibles, il est maladroit de les initialiser pour
rien, puisque tout de suite apr`
es ont leur affecte dautres valeurs

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

Heritage et constructeur

La solution :

Fichier Pixel.java
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
super(a, b);
couleur = c;
}
...
}

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

Heritage et constructeur

La solution :

Fichier Pixel.java
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
super(a, b);
couleur = c;
}
...
}

cela se lit :  pour initialiser un Pixel avec a, b et c, commencez par linitialiser en tant
que Point avec a et b, puis donnez ` a couleur la valeur c 

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

Heritage et constructeur

La solution :

Fichier Pixel.java
class Pixel extends Point {
Color couleur;
Pixel(int a, int b, Color c) {
super(a, b);
couleur = c;
}
...
}

cela se lit :  pour initialiser un Pixel avec a, b et c, commencez par linitialiser en tant
que Point avec a et b, puis donnez ` a couleur la valeur c 
lexpression super(...); doit
etre la premi`
ere instruction dun constructeur

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

Heritage et droits dacc`es

protected : permission interm


ediaire entre private et public
id
ee : lauteur dune sous-classe a plus de droits que le commun des mortels

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

Heritage et droits dacc`es

protected : permission interm


ediaire entre private et public
id
ee : lauteur dune sous-classe a plus de droits que le commun des mortels
exemple : le constructeur prot
eg
e dune classe  abstraite 

Fichier Meuble.java
class Meuble {
protected Meuble(...) {
...
} Meuble
...
}

Fichier Chaise.java
class Chaise extends Meuble {
public Chaise(...) { Chaise Table
super(...);
...
}
...
}

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

Surcharge et redefinition des noms des membres

heritage : que se passe-t-il si un membre de la super-classe a le meme nom quun


membre de la sous-classe ?

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

Surcharge et redefinition des noms des membres

heritage : que se passe-t-il si un membre de la super-classe a le meme nom quun


membre de la sous-classe ?
sil sagit
dune variable et une methode, ou
de deux methodes de signatures differentes
ces membres coexistent (cest le mecanisme de la surcharge habituelle)

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

Surcharge et redefinition des noms des membres

heritage : que se passe-t-il si un membre de la super-classe a le meme nom quun


membre de la sous-classe ?
sil sagit
dune variable et une methode, ou
de deux methodes de signatures differentes
ces membres coexistent (cest le mecanisme de la surcharge habituelle)
sil sagit de deux variables ou de deux methodes de meme signature :
le membre de la sous-classe masque celui de la super-classe

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

Surcharge et redefinition des noms des membres

heritage : que se passe-t-il si un membre de la super-classe a le meme nom quun


membre de la sous-classe ?
sil sagit
dune variable et une methode, ou
de deux methodes de signatures differentes
ces membres coexistent (cest le mecanisme de la surcharge habituelle)
sil sagit de deux variables ou de deux methodes de meme signature :
le membre de la sous-classe masque celui de la super-classe
sil sagit de deux variables, cest generalement une maladresse

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

Surcharge et redefinition des noms des membres

heritage : que se passe-t-il si un membre de la super-classe a le meme nom quun


membre de la sous-classe ?
sil sagit
dune variable et une methode, ou
de deux methodes de signatures differentes
ces membres coexistent (cest le mecanisme de la surcharge habituelle)
sil sagit de deux variables ou de deux methodes de meme signature :
le membre de la sous-classe masque celui de la super-classe
sil sagit de deux variables, cest generalement une maladresse
sil sagit de deux methodes de meme signature : on appelle cela une
redefinition de methode et cest extremement utile

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...
void test() {
System.out.println( code ); // ceci
ecrit 333

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...
void test() {
System.out.println( code ); // ceci
ecrit 333
System.out.println( super.code ); // ceci
ecrit 222

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...
void test() {
System.out.println( this.code ); // ceci
ecrit 333
System.out.println( super.code ); // ceci
ecrit 222

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...
void test() {
System.out.println( this.code ); // ceci
ecrit 333
System.out.println( super.code ); // ceci
ecrit 222
System.out.println( ((Article) this).code ); // ceci
ecrit 111
}
}

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

Masquage de variables membres

Pour les variables masquer nest pas rendre inaccessible


exemple (peu utile !) :
class Article {
int code = 111;
...
}
class Alimentation extends Article {
int code = 222;
...
}
class RayonFrais extends Alimentation {
int code = 333;
...
void test() {
System.out.println( this.code ); // ceci
ecrit 333
System.out.println( super.code ); // ceci
ecrit 222
System.out.println( ((Article) this).code ); // ceci
ecrit 111
}
}
il faut chercher `
aeviter de telles situations si malcommodes
(les variables peuvent avoir des noms plus significatifs !)

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

Cas des methodes : la surcharge

class Point {
...
void deplacer(int dx, int dy) {
changement de la position du point
}
}

class Pixel extends Point {


...
void deplacer(Color k) {
changement de la couleur du pixel
}
}

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

Cas des methodes : la surcharge

class Point {
...
void deplacer(int dx, int dy) {
changement de la position du point
}
}

class Pixel extends Point {


...
void deplacer(Color k) {
changement de la couleur du pixel
}
}

Pixel pix = new Pixel(...);


...
pix.deplacer(u, v); appel de deplacer h
erit
ee de Point
...
pix.deplacer(w); appel de deplacer d
efinie dans Pixel

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

Cas des methodes : la redefinition

si une methode de la sous-classe a la meme signature (nom et arguments) quune


methode de la super-classe : la methode est redefinie

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

Cas des methodes : la redefinition

si une methode de la sous-classe a la meme signature (nom et arguments) quune


methode de la super-classe : la methode est redefinie
justification : puisque la sous-classe raffine la super-classe, certaines methodes de la
super-classe y ont une version raffinee

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

Cas des methodes : la redefinition

si une methode de la sous-classe a la meme signature (nom et arguments) quune


methode de la super-classe : la methode est redefinie
justification : puisque la sous-classe raffine la super-classe, certaines methodes de la
super-classe y ont une version raffinee
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.
c Tichit, 2015-2016 POO et Java 13 / 1
Lh
eritage

Cas des methodes : la redefinition

si une methode de la sous-classe a la meme signature (nom et arguments) quune


methode de la super-classe : la methode est redefinie
justification : puisque la sous-classe raffine la super-classe, certaines methodes de la
super-classe y ont une version raffinee
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 
exemple (un peu banal) :
toString pour un Point : "(10,20)"
toString pour un Pixel : "(10,20)-red"

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

Cas des methodes : la redefinition

Fichier Point.java
class Point { Un point sous forme de
private int x, y; chane :
... "(10,20)"
public String toString() {
return "(" + x + "," + y + ")";
} Un pixel sous forme de
... chane :
} "(10,20)-red"

Fichier Pixel.java
class Pixel extends Point {
private Color couleur;
...
public String toString() {
return "(" + x + "," + y + ")-" + couleur; Erreur :
} x et y sont priv
es.
...
}

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

Cas des methodes : la redefinition

Fichier Point.java
Un point sous forme de
class Point {
protected int x, y; chane :
... "(10,20)"
public String toString() {
return "(" + x + "," + y + ")"; Un pixel sous forme de
} chane :
...
} "(10,20)-red"

Fichier Pixel.java
class Pixel extends Point { Cela passe, mais cest
private Color couleur; mal concu : la classe
...
public String toString() { Pixel sappuie sur des
return "(" + x + "," + y + ")-" + couleur; d
etails internes de
}
... la classe Point
}

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

Cas des methodes : la redefinition

Fichier Point.java
class Point {
private int x, y; Un point sous forme de
... chane :
public String toString() { "(10,20)"
return "(" + x + "," + y + ")";
}
Un pixel sous forme de
...
} chane :
"(10,20)-red"

Fichier Pixel.java
class Pixel extends Point {
private Color couleur;
...
public String toString() {
return super.toString() + "-" + couleur;
} La bonne solution
...
}

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

Larbre des classes

Il existe une classe, nommee Object, qui na pas de super-classe


Certaines classes ont une super-classe explicite
Les classes sans super-classe explicite ont Object pour super-classe
Lensemble des classes est organise en une arborescence de racine Object

Object

Point Number String

Pixel Integer Float

Mais quy a-t-il dans la classe Object ?

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

(Rappel : affectation et comparaison des objets)

laffectation  a = b  dun objet nen fait pas une copie


Point a = new Point(10, 20);
Point b = a;
a et b ne sont pas les noms de deux objets, mais deux noms pour le m
eme objet :

a b

10 20
x y

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

(Rappel : affectation et comparaison des objets)

laffectation  a = b  dun objet nen fait pas une copie


Point a = new Point(10, 20);
Point b = a;
a et b ne sont pas les noms de deux objets, mais deux noms pour le m
eme objet :

a b

10 20
x y

pour avoir une vraie duplication :


Point c = (Point) a.clone();

a b c

10 20 10 20
x y x y

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

(Rappel : affectation et comparaison des objets)

de meme,  a == b  ne signifie pas  a est


egal `
a b ,
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.
c Tichit, 2015-2016 POO et Java 19 / 1
Lh
eritage

(Rappel : affectation et comparaison des objets)

de meme,  a == b  ne signifie pas  a est


egal `
a b ,
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.equals(b) vaut true
a.equals(c) vaut true // si la classe Point a
et
e bien programm
ee

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

Quy a-t-il dans la classe Object ?

Reponse evidente : le comportement commun `


a tous les objets :

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

Quy a-t-il dans la classe Object ?

Reponse evidente : le comportement commun `


a tous les objets :
String toString() : expression de lobjet sous forme de chane de caract`eres
par defaut : classe@adresse ; exemple : Point@18d107f

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

Quy a-t-il dans la classe Object ?

Reponse evidente : le comportement commun `


a tous les objets :
String toString() : expression de lobjet sous forme de chane de caract`eres
par defaut : classe@adresse ; exemple : Point@18d107f
Object clone() : renvoie un clone (duplicata) de lobjet
par defaut : copie  `
a un niveau 
(duplication de lobjet mais non de ses membres)

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

Quy a-t-il dans la classe Object ?

Reponse evidente : le comportement commun `


a tous les objets :
String toString() : expression de lobjet sous forme de chane de caract`eres
par defaut : classe@adresse ; exemple : Point@18d107f
Object clone() : renvoie un clone (duplicata) de lobjet
par defaut : copie  `
a un niveau 
(duplication de lobjet mais non de ses membres)
equals(Object o) : compare les valeurs de deux objets :
a.equals(b) la valeur de a est egale `
a celle de b
par defaut : a.equals(b) a == b

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

Quy a-t-il dans la classe Object ?

Reponse evidente : le comportement commun `


a tous les objets :
String toString() : expression de lobjet sous forme de chane de caract`eres
par defaut : classe@adresse ; exemple : Point@18d107f
Object clone() : renvoie un clone (duplicata) de lobjet
par defaut : copie  `
a un niveau 
(duplication de lobjet mais non de ses membres)
equals(Object o) : compare les valeurs de deux objets :
a.equals(b) la valeur de a est egale `
a celle de b
par defaut : a.equals(b) a == b
Class getClass() : renvoie la classe de lobjet
a.getClass() == b.getClass() a et b sont de meme type

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

Operateur instanceof

unObjet instanceof uneClasse


signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
cest-`
a-dire : unObjet est-il une sorte de uneClasse ?

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

Operateur instanceof

unObjet instanceof uneClasse


signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
cest-`
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
Lh
eritage

Operateur instanceof

unObjet instanceof uneClasse


signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
cest-`
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; nest pas une
} red
efinition de
... equals(Object p)
}

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

Operateur instanceof

unObjet instanceof uneClasse


signifie : unObjet est-il instance de [une sous-classe de] uneClasse ?
cest-`
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
Lh
eritage

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets

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

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets
les classes-enveloppes permettent de  deguiser en objets  les valeurs de types
primitifs :

Byte Float
Short Double
Integer Character
Long Boolean

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

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets
les classes-enveloppes permettent de  deguiser en objets  les valeurs de types
primitifs :

Byte Float
Short Double
Integer Character
Long Boolean

principaux membres (par exemple, pour Integer)

emballage : unInteger = new Integer(unInt);

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

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets
les classes-enveloppes permettent de  deguiser en objets  les valeurs de types
primitifs :

Byte Float
Short Double
Integer Character
Long Boolean

principaux membres (par exemple, pour Integer)

emballage : unInteger = new Integer(unInt);


deballage : unInt = unInteger.intValue();

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

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets
les classes-enveloppes permettent de  deguiser en objets  les valeurs de types
primitifs :

Byte Float
Short Double
Integer Character
Long Boolean

principaux membres (par exemple, pour Integer)

emballage : unInteger = new Integer(unInt);


deballage : unInt = unInteger.intValue();
des utilitaires : unInt = Integer.parseInt(uneChane);

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

Classes-enveloppes des types primitifs

les types primitifs ne sont pas dans larbre des classes ; regrettable car
cela brouille le discours (deux poids, deux mesures)
de nombreux outils ne sont definis que pour les objets
les classes-enveloppes permettent de  deguiser en objets  les valeurs de types
primitifs :

Byte Float
Short Double
Integer Character
Long Boolean

principaux membres (par exemple, pour Integer)

emballage : unInteger = new Integer(unInt);


deballage : unInt = unInteger.intValue();
des utilitaires : unInt = Integer.parseInt(uneChane);

`
a partir de Java 5, emballage et deballage sont devenus automatiques.

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :
la classe Pixel est sous-classe de Point

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qua un Point un Pixel la aussi

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qua un Point un Pixel la aussi
tout ce quon peut demander ` a un Point on peut le demander aussi `
a un
Pixel

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

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qua un Point un Pixel la aussi
tout ce quon 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
Lh
eritage

Polymorphisme

notion qui apparat `


a plusieurs endroits de la POO
ici : polymorphisme = un objet peut apparatre sous divers types
pour commencer, la generalisation : un objet peut apparatre sous un type plus
general que le sien :
la classe Pixel est sous-classe de Point, donc
tout ce qua un Point un Pixel la aussi
tout ce quon 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
Lh
eritage

Generalisation

une m
ethode  attendant  un point

static void unTraitement(Point pt) {


...
/* la valeur de pt est un Point */
...
pt.placer(a, b);
...
}

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

Generalisation

une m
ethode  attendant  un point

static void unTraitement(Point pt) {


...
/* la valeur de pt est un Point */
...
pt.placer(a, b);
...
}

un appel de cette m
ethode
...
Pixel pix = new Pixel(10, 20, pink);
...
unTraitement(pix);
...

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

Generalisation

une m
ethode  attendant  un point

static void unTraitement(Point pt) {


... Il vaudrait mieux dire : la valeur
/* la valeur de pt est un Point */ de pt est  au moins  un Point
...
pt.placer(a, b);
...
}

un appel de cette m
ethode
...
Pixel pix = new Pixel(10, 20, pink);
...
unTraitement(pix);
...

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

Generalisation

La generalisation est une operation sans travail :


Pixel pix = new Pixel(a, b, Color.green);
...
pix

x y couleur

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

Generalisation

La generalisation est une operation sans travail :


Pixel pix = new Pixel(a, b, Color.green);
...
pix

x y couleur

Point pt = pix;
...

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

Generalisation

La generalisation est une operation sans travail :


Pixel pix = new Pixel(a, b, Color.green);
...
pix

x y couleur

Point pt = pix;
...
pix pt

x y couleur

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
a un moment donn e

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
a un moment donn e
alors que la g
en
eralisation est toujours l
egitime et implicite

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
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)

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
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 responsabilite du programmeur

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
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 responsabilite du programmeur
est controlee par Java, au moins `
a lexecution

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

Particularisation

operation consistant `a voir un objet sous un type plus pr


ecis (moins g
en
eral) que celui sous
lequel il apparat `
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 responsabilite du programmeur
est controlee par Java, au moins `
a lexecution

exemple bien glauque


static void unTraitement(Point pt) {
... Control
e par Java lors de
Pixel pix = (Pixel) pt; lex
ecution
...
pix.couleur = Color.black;
...
}

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

Particularisation

Comme la generalisation, la particularisation est une operation sans travail, mais


 risquee 

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

Particularisation

Comme la generalisation, la particularisation est une operation sans travail, mais


 risquee 
Elle ne peut servir qu`
a donner `
a un objet un type quil a dej`
a

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

Particularisation

Comme la generalisation, la particularisation est une operation sans travail, mais


 risquee 
Elle ne peut servir qu`
a donner `
a un objet un type quil a dej`
a
Point pt = new Point(a, b);
...
pt

x y

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

Particularisation

Comme la generalisation, la particularisation est une operation sans travail, mais


 risquee 
Elle ne peut servir qu`
a donner `
a un objet un type quil a dej`
a
Point pt = new Point(a, b);
...
pt

x y

Pixel pix = (Pixel) pt; ERREUR !


...
pt pix

o est la couleur ???


x y

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

Generalisation et particularisation, exemple : les collections

Les collections (classes Collection, List, Vector, Set, Map, etc.) de la biblioth`
eque Java
sont d
efinies en toute gen
eralit
e

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

Generalisation et particularisation, exemple : les collections

Les collections (classes Collection, List, Vector, Set, Map, etc.) de la biblioth`
eque Java
sont d
efinies en toute gen
eralit
e
leurs
el
ements sont d
eclar
es sous le type Object

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

Generalisation et particularisation, exemple : les collections

Les collections (classes Collection, List, Vector, Set, Map, etc.) de la biblioth`
eque Java
sont d
efinies en toute gen
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();
/* Teste si la pile est vide */
void push(Object item);
/* Empile lobjet indiqu
e */
Object pop();
/* Enl`
eve lobjet au sommet de la pile et le renvoie */
...
}

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

Exemple : les collections

Exemple dutilisation 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

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

Exemple : les collections

Exemple dutilisation 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
d
eclaration et initialisation de la pile
Stack pile = new Stack();

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

Exemple : les collections

Exemple dutilisation 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
d
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);
}

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

Exemple : les collections

Exemple dutilisation 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
d
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); gen
eralisation de pt
}

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

Exemple : les collections

Exemple dutilisation 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
d
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); gen
eralisation de pt
}
d
epilement des points
while (!pile.empty()) {
Point pt = (Point) pile.pop();
exploitation de pt
}

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

Exemple : les collections

Exemple dutilisation 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
d
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); gen
eralisation de pt
}
d
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
Lh
eritage

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}

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

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}

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

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}

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

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}
class Resident extends Abonn e {
les r
esidents ne payent pas
}

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

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}
class Resident extends Abonn e {
les r
esidents ne payent pas
}
toutes ces classes d
efinissent ou red
efinissent la m
ethode
public void emettreTicket();

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
...

Habituel
emettreTicket()
...

Abonn
emettreTicket()
...

Rsident
emettreTicket()
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel
emettreTicket()
...

Abonn
emettreTicket()
...

Rsident
emettreTicket()
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel une expression comme
emettreTicket() unClient.emettreTicket();
...
pose deux questions :
Abonn cette expression passe-t-elle la compilation ?
emettreTicket()
...

Rsident
emettreTicket()
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel une expression comme
emettreTicket() unClient.emettreTicket();
...
pose deux questions :
Abonn cette expression passe-t-elle la compilation ?
emettreTicket()
Oui, car emettreTicket() est membre de la classe Usager
...

Rsident
emettreTicket()
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel une expression comme
emettreTicket() unClient.emettreTicket();
...
pose deux questions :
Abonn cette expression passe-t-elle la compilation ?
emettreTicket()
Oui, car emettreTicket() est membre de la classe Usager
... peut-on dire quel sera son effet `
a lex
ecution ?

Rsident
emettreTicket()
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel une expression comme
emettreTicket() unClient.emettreTicket();
...
pose deux questions :
Abonn cette expression passe-t-elle la compilation ?
emettreTicket()
Oui, car emettreTicket() est membre de la classe Usager
... peut-on dire quel sera son effet `
a lex
ecution ?
Non, car la methode emettreTicket() etant red
efinie,
Rsident cela d
ependra de la valeur effective de unClient au
emettreTicket() moment de lappel.
...

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

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
... avec la d
eclaration :
Usager unClient;
Habituel une expression comme
emettreTicket() unClient.emettreTicket();
...
pose deux questions :
Abonn cette expression passe-t-elle la compilation ?
emettreTicket()
Oui, car emettreTicket() est membre de la classe Usager
... peut-on dire quel sera son effet `
a lex
ecution ?
Non, car la methode emettreTicket() etant red
efinie,
Rsident cela d
ependra de la valeur effective de unClient au
emettreTicket() moment de lappel.
...

A retenir : la methode appelee dans unObjet.uneMethode(...) est toujours


la plus  specialis
ee  possible, c.-`
a-d. la plus proche du type effectif de unObjet

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

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
...
}
}

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

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
...
}
}
class Triangle extends ObjetGraphique {
public void seDessiner() {
op
erations pour dessiner un triangle
}
}

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

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
...
}
}
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.
c Tichit, 2015-2016 POO et Java 33 / 1
Lh
eritage

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
...
}
} 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
Lh
eritage

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
System.out.println("ERREUR");
}
} 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
Lh
eritage

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];

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

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);

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

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);

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

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);
image[2] = new Rectangle(...);
...

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

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);
image[2] = new Rectangle(...);
...
Affichage
for (int i = 0; i < n; i++)
image[i].seDessiner();

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

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);
image[2] = new Rectangle(...);
...
Affichage
for (int i = 0; i < n; i++)
image[i].seDessiner();

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