Vous êtes sur la page 1sur 6

23/11/2017

POO en Java
Ch. VIII

Héritage & Polymorphisme

L'héritage
L'héritage est un mécanisme qui facilite la réutilisation
du code et la gestion de son évolution.

Il définit une relation entre deux classes :


1. une classe mère ou super-classe ou classe de base
2. une classe fille ou sous-classe ou classe dérivée qui
hérite de sa classe mère
Grâce à l'héritage, les objets d'une classe fille ont accès
aux données et aux méthodes de la classe parent et
peuvent les étendre.

1
23/11/2017

L'héritage
Mise en œuvre de l'héritage :

On utilise le mot clé extends pour indiquer qu'une classe


hérite d'une autre.
Exemple : class Fille extends Mere { ... }
Object est la classe mère de toutes les classes en
Java.

Une classe qui n'hérite d'aucune autre classe, hérite


implicitement de Object.

L'héritage
Une classe peut avoir plusieurs sous-classes.

Par contre : elle ne peut hériter que d'une seule


classe (pas d'héritage multiple en Java).

Appel des méthodes héritées :

Pour invoquer une méthode d'une classe parent, il


suffit de la préfixer par super.

Pour appeler le constructeur de la classe parent il


suffit d'écrire super(paramètres) avec les
paramètres adéquats.

2
23/11/2017

public class Personne { L'héritage: exemple


private String prenom;
private String nom;
public Personne(String nom,String prenom){
this.nom=nom; this.prenom=prenom;
}
public void afficher(){
System.out.println("prenom="+prenom+" nom="+nom);
}
}
Public class Etudiant extends Personne{
private String cne;
public Etudiant (String nom, String prenom, String cne){
super(nom,prenom); this.cne=cne;
}
public void afficherTout(){
super.afficher();
System.out.println("cne = "+cne);
}
Public class Test{
}
Public static void main(String[] args) {
Etudiant e=new Etudiant("Alaoui","Omar","200801");
e.afficherTout();
}
}

L'héritage
Remarque :

Dans le constructeur de la classe fille, l'appel à


super(paramètres) se fait en premier avant l’initialisation
des attributs de la classe fille.
Il est possible d'affecter un objet de la classe Fille à un
objet de la classe Mère :
Exemple : ClasseMere m=new ClasseFille()

3
23/11/2017

La Redéfinition
Les sous-classes peuvent redéfinir les variables
et les méthodes héritées :
Pour les variables : il suffit de les redéclarer
sous le même nom avec un type différent.

Pour les méthodes : elle sont redéfinies avec


exactement la même signature des méthodes de
la classe mère, en la faisant précéder du mot clé
@Override

La Redéfinition
Remarques :
La redéfinition d'une méthode héritée doit
impérativement conserver la déclaration de la
méthode parent
Si la signature de la méthode change, ce n'est
plus une redéfinition mais une surcharge.
Cette nouvelle méthode n'est pas héritée : la
classe mère ne possède pas de méthode
possédant cette signature.

4
23/11/2017

La Redéfinition : Exemple
public class Employe { public Employe(int code, String nom) {

private int code; this.code = code;

private String nom; this.nom = nom;

public employe() { }

this.code=0; public String getNom(){

this.nom = ""; return nom;

} }

public Employe(String nom) { public void afficher(){

this.code=0; System.out.println("code="+

this.nom = nom; this.code+"nom="+ this.nom );

} }

La Redéfinition : Exemple
public class Secretaire extends Employe{
private String code;
public Secretaire(String code,String nom) {
super(nom);
this.code = code;
}
@Override
public void afficher(){
System.out.println("code = "+this.code+" nom =" + this.getNom());
}
}

5
23/11/2017

La Redéfinition : Exemple
public class Main {
public static void main(String[] args) {
Employe emp=new Employe("fantôme");
emp.afficher();
Secretaire sec=new Secretaire("2012/14a", "Samira");
sec.afficher();
}
}

Le polymorphisme
Le polymorphisme : class Test {
soit l’exemple suivant: public static void main (String[]
class Humain{ args) {
public void parler(){ Humain h=new Humain();
System.out.println("Je Arabe a=new Arabe();
parle"); h=a; Légal car Arabe
} h.parler(); est une sous-
} classe de Humain
}
} Quelle méthode
class Arabe extends Humain{ sera exécutée ?
@Override
public void parler(){
System.out.println("Je Réponse : la méthode parler() de
parle arabe"); la classe Arabe car la machine
} virtuelle détecte à l’exécution le
} type de l’objet assigné à la variable
Polymorphisme de la classe de base