Héritage
Héritage
Héritage
Chapitre n◦ 6: Héritage
Filière: SMI-S5
1 L’héritage
Exemple introductif
La relation « est un »
Un cercle « est un » point géométrique
Le constructeur d’une classe héritée
La protection des attributs hérités
Les conversions explicites de références
Le polymorphisme
Classes et méthodes finales
Surcharge vs. polymorphisme
Problème de réutilisabilité
Comment écrire une classe qui possède tous les membres d’une classe et d’autres
en plus, sans tout réécrire ?
p Comment éviter d’écrire plusieurs fois la même chose dans des classes qui
ont des membres communs mais pas tous ?
Solution : L’héritage
L’héritage permettant de réutiliser des classes déjà existantes, appelées super-classes
afin de créer des classes plus spécialisées, appelées sous-classes.
p Pour déterminer si une classe B hérite d’une classe A, il suffit de savoir s’il existe
une relation est un entre B et A. Si tel est le cas, la syntaxe de déclaration est la
suivante :
.
class B extends A {
. // attributs et méthodes de la classe B
. }
p Les membres de la classe Point restent disponibles pour la classe Cercle afin
d’éviter la duplication de code.
p Pour appeler un membre défini dans la classe Point, la solution consiste à utiliser le
terme super.membre
Exemple :
class Point {
. int x, y ;
. void deplacer(int dx, int dy){x += dx ; y += dy ;}
. void afficher(){System.out.print("Je suis en"+x+" "+y) ;}
}
class Cercle extends Point{
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java Filière: SMI-S5 5 / 14
L’héritage Le constructeur d’une classe héritée
Exemple :
class Point {
. int x,y ;
. Point(int x0, int y0){x = x0 ;y = y0 ;}
. ...
}
class Cercle extends Point{
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exemple :
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exemple :
class Point{
private int x ;
protected int y ;
public int getX(){return x ;}
}
class Cercle extends Point{
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
p La relation d’héritage permet de traiter les objets des sous-classes comme s’ils
étaient des objets de leur classe parente.
Exemple :
Cercle c1 = new Cercle(...) ;
Point p1 = c1 ; // Ok, un cercle est un point
Cercle c2 = p1 ; // Erreurr, un point n’est pas forcément un cercle !
Cercle c3 = (Cercle)p1 ; // Ok, p1 référence effectivement un cercle
Exemple :
public class TestPointsCercles {
. public static void main(String [] arg) {
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Exemple :
class Point {
. int x,y ;
. Point(int x, int y){this.x = x ;this.y = y ;}
. void afficher(){
. this.identifie() ;
. System.out.print("Je suis en "+x+" "+y) ;
. }
. void identifie(){System.out.print("Je suis un point") ;}
. }
class Cercle extends Point {
. double r ;
. Cercle(int a, int b, doublr r) {super(a,b) ; this.r=r ;}
. void afficher(){
. super.afficher() ;
. System.out.print(" et mon rayon est :"+r) ;
. }
. void identifie(){System.out.print("Je suis un cercle ") ;}
. }
public class TestPolymorphisme {
. public static void main (String[] args){
. Point p1 = new Point(5,4) ;p1.afficher() ;//Affiche Je suis un point Je suis en 5 4
. Point p2 = new Cercle(3,5,2.5) ; p2.afficher() ;//Affiche Je suis un cercle Je suis en 3 5
.} . et mon rayon est :2.5
}
ISMAILI ALAOUI El Mehdi Programmation orientée objet en Java Filière: SMI-S5 12 / 14
L’héritage Classes et méthodes finales
p Une méthode déclarée final ne peut pas être redéfinie dans une classe dérivée.
Exemple
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................