Académique Documents
Professionnel Documents
Culture Documents
Héritage et polymorphisme
Introduction
Réutilisation :
Héritage
Héritage
1) Extension d’une classe
2) Terminologie
3) Généralisation/Spécialisation
4) Héritage en Java
6) Réutilisation
public class A {
public void hello() { Pour résoudre un message, la hiérarchie
System.out.println(«Hello»); des classes est parcourue de manière
} ascendante jusqu’à trouver la méthode
} correspondante
public class A {
public void hello() {
System.out.println(«Hello»);
}
public void affiche() {
System.out.println(«Je suis un A»); A a = new A();
} B b = new B();
} a.hello(); --> Hello
a.affiche(); -->Je suis un A
b.hello(); --> Hello
b.affiche(); -->Je suis un B
public class B extends A {
public void affiche() {
System.out.println(«Je suis un B»);}
}
Redéfinition des méthodes
Ne pas confondre redéfinition (overriding) avec surcharge
(overloading)
public class A {
public void methodX(int i) {
...
}
}
Surcharge Redéfinition
public class B extends A { public class C extends A {
public void methodX(Color i) { public void methodX(int i) {
... ...
} }
} }
- par défaut une classe qui ne définit pas de clause extends hérite de la
- si la première instruction d'un constructeur n'est pas un appel explicite à l’un des
constructeur de la superclasse, alors JAVA insère implicitement l'appel super()
- chaque fois qu'un objet est créé les constructeurs sont invoqués en remontant en séquence
de classe en classe dans la hiérarchie jusqu'à la classe Object
- c'est le corps du constructeur de la classe Object qui est toujours exécuté en premier, suivi
du corps des constructeurs des différentes classes en redescendant dans la hiérarchie.
Il est garantit qu'un constructeur d'une classe est toujours appelé lorsqu'une instance
de l'une de ses sous classes est créée.
- un objet c instance de C sous classe de B elle même sous classe de A est un objet de
classe C mais est aussi un objet de classe B et de classe A. Lorsqu’il est créé c doit l’être
avec les caractéristiques d ’un objet de A de B et de C
Constructeur par défaut
Lorsqu'une classe ne définit pas explicitement de constructeur, elle possède un
constructeur par défaut :
- sans paramètres
- de corps vide
public A() {
Constructeur par défaut implicite
super();
}
8) Visibilité des variables et méthodes
Principe d'encapsulation : les données propres à un objet ne sont accessibles qu'au
travers des méthodes de cet objet
- sécurité des données : elles ne sont accessibles qu'au travers de méthodes en lesquelles
on peut avoir confiance
- protected est accessible dans la classe où il est défini, dans toutes ses sous-classes et dans
toutes les classes du même package.
package (visibilité par défaut) n'est accessible que dans les classes du même package
que celui de la classe où il est défini
Visibilité des variables et méthodes
Private protected public
La classe elle Oui Oui Oui
meme
Classes du Non Oui Oui
même
package
Sous-classes Non Oui oui
d'un
autre
package
Classes (non Non non oui
sous-classes)
d'un autre
package
Surclassement
Tout objet instance de la classe B peut être aussi vu comme
une instance de la classe A.
Etudiant e;
e = new EtudiantSportif(...);
Polymorphisme
Le terme polymorphisme décrit la caractéristique d'un élément qui
peut prendre plusieurs formes, comme l'eau qui se trouve à l'état
solide, liquide ou gazeux.
- le fait qu’un objet d’une classe puisse être manipulé comme s’il
appartenait à une autre classe.
- factoriser le code
- au niveau de la classe dans laquelle elle est déclarée, on ne peut pas dire comment
la réaliser.
Une classe pour laquelle au moins une opération abstraite est déclarée est une
classe abstraite (l'inverse n'est pas vrai).
- l'utilisation du nom d'une classe abstraite comme type pour une (des) référence(s)
est toujours possible (et souvent souhaitable !!!)
Classes abstraites
Une classe abstraite est une description d'objets destinée à être héritée par des
classes plus spécialisées.
Pour être utile, une classe abstraite doit admettre des classes descendantes
concrètes.
La classe Point:
class Point {
double x;
double y;
void Point(double x,double y){
this.x = x;
this.y = y;
}
void affiche(){
System.out.println(« les coordonnées sont »+x « et »+y);
}}
Exemple 2
Import PointGraphique;
public class test1{
public static void main(String arg[]){
new PointGraphique( (new PointGraphique ( 2, 5,Color.reed)). affiche();
}}
}
Exécution
2,5, reed
Tableau d’objet
Un objet est une donnée comme une autre et à ce titre plusieurs
objets peuvent être rassemblés dans un tableau :
Import PointGraphique;
}}
Les paquetages
Pour écrire une ligne à l'écran, nous utilisons l'instruction
System.out.println(...)
package paquetage;
}}
Import paquetage;
Ou
Import paquetage.Point;