Académique Documents
Professionnel Documents
Culture Documents
Classes: DSI 21
spécialisation généralisation
Éléphant est une
spécialisation d’Animal.
Un éléphant est un cas Éléphant sous-classe
particulier animal
➫ pour les classes qui ne sont pas "dans le même package" protected
est synonyme de private
private int a;
package monPackage; package tonPackage;
public class Classe3 int b; public class Classe5
extends Classe1 { protected int c; extends Classe1 {
a int d;
public c c
b d c b d d
} } }
public class A {
Surcharge Redéfinition
super(arguments);
Cette instruction doit être la première du constructeur de la
sous-classe
public A()
{
...
}
..}
public class B extends A {
// attributs
String nom; public B() { Constructeur par
super();
// méthodes
}
défaut implicite
String getNom() {
return nom;
}
...
Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
}
Héritage
Constructeur par défaut
public class ClasseA {
double x;
// constructeur Constructeur explicite
public ClasseA(double x) { masque constructeur par défaut
this.x = x;
}
} Pas de constructeur
sans paramètres
C:>javac ClasseB.java
ClasseB.java:3: No constructor matching ClasseA() found in class ClasseA.
public ClasseB() {
^
1 error
…}
Opérateur pour vérifier si une classe est bien un instance d’une classe.
1 public class Personne { . . . }
Opérateur pour vérifier si une classe est bien un instance d’une classe.
1 public class Personne { . . . }
downcasting
D E
EtudiantSportif
F
C c;
c = new D();
c = new E();
c = new F();
c = new A();
Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE) c = new B();
Héritage
Surclassement ou UpCasting
Lorsqu'un objet est "sur-classé" il est vu par le compilateur comme un objet du
type de la référence utilisée pour le désigner
Ses fonctionnalités sont alors restreintes à celles proposées par la classe du
type de la référence
EtudiantSportif es;
es = new EtudiantSportif("DUPONT","Jean",25,..,"Badminton",..);
Etudiant e; es
e = es; / / upcasting
ou casting implicite
e
e.affiche();
es.affiche(); instanceOf
DUPONT
e.nbInscriptions();
Jean
es.nbInscriptions();
25
es.bonusSpor t i f ( ) ;
e.bonusSportif(); ...
Badminton
Le compilateur refuse ce
...
message: pas de méthode
bonusSportif définie dans
la classe Etudiant Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
Héritage
Lien dynamique - Résolution des
Lorsqu'une méthode d'un objet est accédée au messages
travers d'une référence "surclassée", c'est la
méthode telle qu'elle est définie au niveau de
la classe effective de l'objet qui est en fait Etudiant
invoquée et exécutée
public void a f f i c h e ( ) {
Upcasting casting implicite System.out .pri n t l n (
"Nom : "+nom+"\n"
Mere m = new Fille(…) "Prénom : "+prénom+"\n"
Etudiant e = new EtudiantSportif( "DUPONT","Jean",25,.., "Age : "+age+ . . . ) ;
"Badminton",..); }
?
e.affiche();
e
instanceOf ? EtudiantSportif
DUPONT
Nom : DUPONT public void a f f i c h e ( ) {
Jean
Prénom : Jean su p e r .affic h e();
25 Age : 25 System.out .pri n t l n (
... … "Sport" : "+sport+"\n"
Sport : Badminton +...);
Badminton }
...Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
Polymorphisme
DownCasting
ClasseX o b j = …
ClasseA a = (ClasseA) obj;
Pour que le transtypage soit valide, il faut qu’à l’exécution le type effectif de
obj soit « compatible » avec le type ClasseA
Compatible : obj possède la même classe classeA ou n’importe quelle
sous classe de ClasseA (il faut que obj instanceof ClasseA retourne true)
Si la promesse n’est pas tenue une erreur d’exécution se produit.
java.lang.ClassCastException: ClasseX
at Test.main(Test.java:52)
méthodeX()
ClasseB ClasseC
méthodeX()
ClasseA obj A;
Surclassement = upcasting
la référence peut
un cas particulier de
désigner des objets de polymorphisme
objA = . . . classe différente
(n’importe quelle sous (polymorphisme par sous-
classe de ClasseA)
typage)
objA.methodeX();
+
manipulation uniforme des
Lien dynamique
Le comportement est
objets de plusieurs classes
différent selon la classe par l'intermédiaire d'une
effective de l’objet
Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
classe de base commune
Polymorphisme
l i s t e peut contenir des étudiants de n’importe queltype
surcharge
ClasseA System.out.println("param typeA");
}
Le choix de la méthode à exécuter est effectué à la compilation en fonctiondes types déclarés : Sélectionstatique
Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
Polymorphisme
A propos de equals
Tester l’égalité de deux objets de la mêmeclasse
public class Object {
@Override
...
public boolean equals(Object o) public boolean equals(Object o) {
return t h i s == o i f ( t h i s == o)
} return t r u e ;
...
}
i f ( ! (o instanceof Po i n t ) )
return f aequals(Point
public boolean lse; pt) {
return
Point ptthis.x
= ( Po i n== pt.x
t ) o; / / && this.y == pt.y;
downcasting
public class Point { }
retu rn this . x == pt o . x && t hi s . y == pt
o.y ;
private double x ;
private double y ; redéfinir (overrides) la méthode
} equals(Object o) héritée de Object
...
Point p1 = new Point(15,11);
} Point p2 = new Point(15,11);
p1.equals(p2) - -- ->> true
true
Object o = p2;
p1.equals(o) ---->> false
true
C c = new F ( ) ;
F } System.out.println("methode mf définie dans f");
public void me() {
mf()
}
System.out.println("methode me redéfinie dans F");}
me()
compilation exécution
c.ma( ) ; La classe C hérite d'une méthode ma méthode ma définie dans E
B b = c; Incompatible types
Un C n'est pas un B
Incompatible types
E e = c; Un C n'est pas forcément un E
E e = (E)c; Transtypage (Dowcasting), le compilateur ne fait pas de
e.me(); méthode me définie dans F
vérification La classe E définit bien une méthode me
Chap 5: Héritage et Polymorphisme – (Samia BA LEBIBE)
Transtypage (Dowcasting), le compilateur ne fait pas de ClassCastException Un F n'est pas
D d = (D) c ; vérification un D