SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
1
ENRICHISSEZ VOS CLASSES AVEC
"EXTENDS"
Dr. Asmaa BENGUEDDACH
Dr Asmaa BENGUEDDACH 2
Dr Asmaa BENGUEDDACH 3
I. A quoi sert Héritage ?
II. Quand utiliser protected ou private ?
III. Comment définir les nouveaux constructeurs ?
IV. Comment redéfinir une méthode ?
Dr Asmaa BENGUEDDACH
4
Votre Mission …
Guerrier …
Dr Asmaa BENGUEDDACH 5
class Guerrier {
// Attributs
String nom;
int energie;
int dureeVie;
Arme arme;
// Méthodes
rencontrer (Personnage)
transformation()
seBattre(Personnage)
AttaqueFourdoyante(Personnage)
…
}
Magicien …
Dr Asmaa BENGUEDDACH 6
class Magicien{
// Attributs
String nom;
int energie;
int dureeVie;
Baguette baguette;
// Méthodes
rencontrer(Personnage);
Transformation() ;
jeterUnSort(Personnage);
Invisibilité();
…
}
Sorcier …
Dr Asmaa BENGUEDDACH 7
class Sorcier {
// Attributs
String nom;
int energie;
int dureeVie;
Baguette baguette;
LivreMagique Grimoire;
// Méthodes
rencontrer(Personnage);
Transformation() ;
jeterUnSort(Personnage);
Invisibilité();
voler()…
invoquerLesMorts()
}
Monstre …
Dr Asmaa BENGUEDDACH 8
class Monstre {
// Attributs
String nom;
int energie;
int dureeVie;
Griffe griffe;
// Méthodes
rencontrer(Personnage)
transformation()
attaqueSanguinaire(Personnage)
attaqueNocturne(Personnage)
…
}
Personnage …
Dr Asmaa BENGUEDDACH 9
class Personnage {
// Attributs
String nom;
int energie;
int dureeVie;
// Méthodes
rencontrer (Personnage)
transformation()
…
}
Héritage
Dr Asmaa BENGUEDDACH 10
class Personnage {
String nom;
int energie;
int dureeVie;
rencontrer (Personnage)
transformation() }
class Guerrier {
Arme arme;
seBattre(Personnage)
AttaqueFourdoyante(Personnage)
}
class Magicien{
Baguette baguette;
Batton batton;
jeterUnSort(Personnage);
Invisibilité(); }
class Monstre {
Griffe griffe;
attaqueSanguinaire(Person
nage)
attaqueNocturne(Personnag
e)}
class Sorcier {
Livre livreMagique;
Voler()
invoquerLesMorts()}
«est-un»«est-un»«est-un»
«est-un»
L’Héritage
✧ Représente la relation « est-un ».
✧ Permet de créer des classes plus spécialisées
« sous-classes » à partir de classes plus générales
déjà existantes, appelées « super-classes ».
✧ Évite la duplication du code
Dr Asmaa BENGUEDDACH 11
Classe
Sous-ClasseSous-Classe Sous-Classe
Héritage spécialisation
Caractéristiques de
l’Héritage
✧ Un C1 est (aussi) de type C.
✧ C1 hérite de C :
– Les attributs et méthode.
– Mais pas ses constructeurs.
✧ De plus :
– On peut définir des attributs et méthode supp =>
ENRICHISSEMENT
– On peut redéfinir certaines méthodes de C =>
SPÉCIALISATION
Dr Asmaa BENGUEDDACH 12
C
C1
Dr Asmaa BENGUEDDACH 13Dr Asmaa BENGUEDDACH 13Dr Asmaa BENGUEDDACH 13
Définition — Un rectangle est un quadrilatère qui possède
quatre angles droits.
Ensuite compléter sa définition en le reliant aux autres
objets du même domaine.
Passons à la pratique …
class nomSousClasse extends nomSuperClasse {
/*déclaration des attributs et des méthode de
la sous classe*/
… }
Dr Asmaa BENGUEDDACH 14
class Carre extends Rectangle{
…
}
Exemple d’1 attribut hérité
Dr Asmaa BENGUEDDACH 15
class Personnage{
//…
private int energie;
}
class Guerrier extends Personnage{
//…
public void seBattre(Personnage
lePauvre)
if(energie>0)&&(energie>
lePauvre.energie)
//frapper le perso
}
}
Droit d’accès "protected"
✧ C1 n’a pas le droit d’accès aux membres
(attributs ou méthodes) privés hérités de
C.
✧ Si C veut permettre à Ci d’accèder à un
membre donné, elle doit le déclarer
comme protégé (protected).
✧ Peu recommandé => nuit à une bonne
encapsulation en Java.
Dr Asmaa BENGUEDDACH 16
Exemple d’1 attribut hérité
Dr Asmaa BENGUEDDACH 17
class Personnage{
//…
protected int energie;
}
class Guerrier extends Personnage{
//…
public void seBattre(Personnage lePauvre)
if(energie>0)&&(energie>lePauvre.energie)
// Correct
//frapper le perso
}
}
Exemple d’1 méthode
héritée
Class Jeu{
Guerrier g=new Guerrier(…);
Monstre m= new Monstre(…);
…
g.rencontrer(m);
…
}
Dr Asmaa BENGUEDDACH 18
class Personnage {
String nom;
int energie;
int dureeVie;
rencontrer (Personnage)
transformation() }
class Guerrier {
Arme arme;
seBattre(Personnage
)
AttaqueFourdoyante(
Personnage)
}
«est-un»
Sauf les Constructeurs !!!?
Dr Asmaa BENGUEDDACH 19
Comment faire ?
✧ Le constructeur de C1, doit initialiser :
✧ Ses attributs propres.
✧ Les attributs hérités C.
✧ Mais !!!!
✧ Ce n’est pas aux constructeurs de C1 de
réaliser l’initialisation des attributs hérités
✧ Solution: invoquer les constructeurs de C
avec Super()
Dr Asmaa BENGUEDDACH 20
Passons à la pratique …
nomSousClasse (liste des paramètres){
/*Arguments : liste d’arguments attendus par un des
constructeurs de la super-classe */
super(Arguments)
// initialisation des attributs de la sous-classe ici
var1 = ….
var2 = .…
}
Dr Asmaa BENGUEDDACH 21
Exemple (1) de
constructeur
Dr Asmaa BENGUEDDACH 22
class Carre extends Rectangle{
public Carre(double taille) {
super(taille, taille);
//…
}
}
Parfois il n’est pas nécessaire d’avoir des
attributs supplémentaires …
Dr Asmaa BENGUEDDACH 23
Avez vous une question ?
N’oubliez pas votre prochaine
mission …
Next …
Polymorphisme
Dr Asmaa BENGUEDDACH 24
Je..Qui ?
Exemple d’1 redéfinition
✧ Redéfinir la méthode rencontrer(Personnage p)
pour la classe Monstre.
Dr Asmaa BENGUEDDACH 25
class Monstre extends Personnage{
…
Rencontrer(Personnage p){
frapper(p);
}
}
Exemple (2) de
constructeur
Dr Asmaa BENGUEDDACH 26
class FigureGeometrique{
protected Position position;
public FigureGeometrique(Position position){
position = new Position(x,y);
}
//…
}
Class Rectangle extends FormeGeometrique{
protected double longueur;
protected double hauteur;
public Rectangle(Position p, double longueur, double hauteur)
{
super(x, y);
this.largeur = longueur;
this.hauteur = hauteur;
//…}
}
Ordre d’appel des constructeurs
Dr Asmaa BENGUEDDACH 27
class A
a1
a2
m1(…)
m2(…)
class B
b1
m3(…)
m4(…)
class A
c1
c2
m5(…)
A(…){
a1= …
a2= …
}
B(…){
super(…);
b1= …
}
C(…){
super(…);
c1= …
c2= …
}
C monC = new C(…);
Dr Asmaa BENGUEDDACH 28
Ordre d’appel des constructeurs
Dr Asmaa BENGUEDDACH 28
class A
a1
a2
m1(…)
m2(…)
class B
b1
m3(…)
m4(…)
class A
c1
c2
m5(…)
A(…){
a1= …
a2= …
}
B(…){
super(…);
b1= …
}
C(…){
super(…);
c1= …
c2= …
}
C monC = new C(…);
En Java la
Résolution
des liens
est
Dynamique
29
class Premiere {
public Premiere() {
System.out.println("constructe
ur de Premiere");
}}
class Quatrieme extends Troisieme {
public Quatrieme(double d) {
super(14);
System.out.println("constructeur de
Quatrieme");}}
class Deuxieme extends
Premiere {
public Deuxieme(boolean b) {
super();
System.out.println("constructe
ur de Seconde");}
}
class Troisieme extends Premiere {
public Troisieme(int i) {
super();
System.out.println("constructeur de
Troisieme"); }}
new Premiere();
System.out.println("====================");
new Deuxieme(true);
System.out.println("====================");
new Troisieme(15);
System.out.println("====================");
new Quatrieme(12.3);
Dr Asmaa BENGUEDDACH 3030
new Cinquieme();
System.out.println("================");
new Sixieme();
Premiere
Cinquieme
Sixieme
public Premiere() {
System.out.println("cons
tructeur de Premiere");
}
public Cinquieme() {
System.out.println("con
structeur de
Cinquieme");
}
public Sixieme () {
System.out.println("cons
tructeur de Sixieme");
}}
Dr Asmaa BENGUEDDACH 3131
class Cinquieme extends
Premiere {
public Cinquieme() {
System.out.println("constructe
ur de Cinquieme");
}}
class Sixieme extends public
Cinquieme {
public Sixieme () {
System.out.println("constructe
ur de Sixieme");
}}
new Cinquieme();
System.out.println("==========
======");
new Sixieme();
class Premiere {
public Premiere() {
System.out.println("constructe
ur de Premiere");
}}
Dr Asmaa BENGUEDDACH 32
class Septieme extends Premiere{
public Septieme(int i){
System.out.println("constructeur de Septieme");
}
}
class Huitieme extends Septieme{
public Huitieme(){
System.out.println("constructeur de Huitieme");
}
}
✧ Le programme suivant provoque une erreur à la
compilation : la classe Huitieme est incorrecte?
33
class Neuvieme extends Premiere{
public Neuvieme(int i){
System.out.println("premier constructeur de Neuvieme");}
public Neuvieme(boolean b){
System.out.println("second constructeur de Neuvieme");}}
class Dixieme extends Neuvieme{
public Dixieme(double d){
super(true);
System.out.println("premier constructeur de Dixieme");}
public Dixieme(int x, boolean y){
super(x);
System.out.println("second constructeur de Dixieme");
}}
34
class Neuvieme extends Premiere{
Neuvieme(int i){
System.out.println("premier constructeur de Neuvieme");}
Neuvieme(boolean b){
System.out.println("second constructeur de Neuvieme");}}
class Dixieme extends Neuvieme{
Dixieme(double d){
super(true);
System.out.println("premier constructeur de Dixieme");}
Dixieme(int x, boolean y){
super(x);
System.out.println("second constructeur de Dixieme");
}}
…..
public static void main(String[] args){
new Dixieme(10.5);
System.out.println("=============================");
new Dixieme(45, true);}
Résumé (1)
✧ Chaque constructeur de C1 doit appeler
super(…).
✧ Les arguments fournis à super doivent être au
moins ceux corr à l’un des constructeurs de C.
✧ L’appel super() doit être la toute 1ère instruction.
✧ Erreur si l’appel vient plus tard ou 2 fois.
✧ Aucune une autre méthode ne peut appeler
super (…)
Dr Asmaa BENGUEDDACH 35
✧ Et si on oublie l’appel à super(…) ?
✧Appel automatique à super().
✧Pratique parfois, mais erreur si le constructeur par défaut
n’existe pas.
✧Rappel: le constructeur par défaut est particulier.
✧Il est existe par défaut pour chaque classe qui n’a aucun
autre constructeur
✧Il disparaît dès qu’il y a un autre constructeur
✧ Pour éviter des problèmes avec la hiérarchie de
classes:
✧Toujours déclarer au moins un constructeur
✧Toujours faire l’appel à super(…)
Dr Asmaa BENGUEDDACH 36
Résumé (2)
Activité 1: Constructeur -1
37
Student student = new Student()
Complément
Le Typage en JAVA
38
Règle 1: Le Surclassement (Upcasting)
Règle 2: Le Transtypage (downcasting)
Règle 3: Lien dynamique.
Règle 4: Le Polymorphisme
Règle 5: La Surcharge
Dr Asmaa BENGUEDDACH
39
Maîtrise des 5 règles
Règle 1: UpCasting
40
Règle 1: UpCasting
une référence déclarée de type A = une référence vers un objet de type B
41
Règle 2: DownCasting
ClasseX obj = new ClasseA(); //UpCasting
ClasseA a = (ClasseA) obj; //DownCasting
42
Règle 2: DownCasting
ClasseX obj = new ClasseA(); //UpCasting
ClasseA a = (ClasseA) obj; //DownCasting
43
c = new F();
F f = (F) c ;
Règle 3: Lien Dynamique
• Que va donner e.affiche() ?
Etudiant e = new EtudiantSportif("BENALI","Yanis",25,..,"Tennis",..);
e.affcihe();
44
Activité 2
45
Parent p = new Child();
p.show();
p.OnlyParentShow();
p.OnlyChildShow();
Activité 2
46
Parent p = new Child();
Child c = p;
c.show();
c.OnlyParentShow();
c.OnlyChildShow();
Activité 2
47
Parent p = new Child();
Child c =(Child) p;
c.show();
c.OnlyParentShow();
c.OnlyChildShow();
Activité 2
48
Parent m = new Parent();
m.show();
m.OnlyParentShow();
m.OnlyChildShow();
Child c1 = m;
Règle 4: Polymorphisme
Polymorphisme = Lien Dynamique + Upcasting
49
Règle 5: Surcharge
50

Contenu connexe

Similaire à Enrichissez vos classes avec extends

Chapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objetChapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objetSäß Ŕî
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdfHamzaElgari
 
Héritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieHéritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieMohammedAmineELHARCH1
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAAymen Bedwivski
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaAmel Morchdi
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflectionEric Toguem
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeAmir Souissi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 

Similaire à Enrichissez vos classes avec extends (20)

Chapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objetChapitre 4 la programmation oriénté objet
Chapitre 4 la programmation oriénté objet
 
Cours c++
Cours c++Cours c++
Cours c++
 
Cours5-heritage.pptx
Cours5-heritage.pptxCours5-heritage.pptx
Cours5-heritage.pptx
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
22-reflection.pdf
22-reflection.pdf22-reflection.pdf
22-reflection.pdf
 
Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdf
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Héritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierieHéritage dans cpp dev informatique ingenierie
Héritage dans cpp dev informatique ingenierie
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
Chapitre3 2013 POO
Chapitre3 2013 POOChapitre3 2013 POO
Chapitre3 2013 POO
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Memo java
Memo javaMemo java
Memo java
 

Enrichissez vos classes avec extends

  • 1. 1 ENRICHISSEZ VOS CLASSES AVEC "EXTENDS" Dr. Asmaa BENGUEDDACH
  • 4. I. A quoi sert Héritage ? II. Quand utiliser protected ou private ? III. Comment définir les nouveaux constructeurs ? IV. Comment redéfinir une méthode ? Dr Asmaa BENGUEDDACH 4 Votre Mission …
  • 5. Guerrier … Dr Asmaa BENGUEDDACH 5 class Guerrier { // Attributs String nom; int energie; int dureeVie; Arme arme; // Méthodes rencontrer (Personnage) transformation() seBattre(Personnage) AttaqueFourdoyante(Personnage) … }
  • 6. Magicien … Dr Asmaa BENGUEDDACH 6 class Magicien{ // Attributs String nom; int energie; int dureeVie; Baguette baguette; // Méthodes rencontrer(Personnage); Transformation() ; jeterUnSort(Personnage); Invisibilité(); … }
  • 7. Sorcier … Dr Asmaa BENGUEDDACH 7 class Sorcier { // Attributs String nom; int energie; int dureeVie; Baguette baguette; LivreMagique Grimoire; // Méthodes rencontrer(Personnage); Transformation() ; jeterUnSort(Personnage); Invisibilité(); voler()… invoquerLesMorts() }
  • 8. Monstre … Dr Asmaa BENGUEDDACH 8 class Monstre { // Attributs String nom; int energie; int dureeVie; Griffe griffe; // Méthodes rencontrer(Personnage) transformation() attaqueSanguinaire(Personnage) attaqueNocturne(Personnage) … }
  • 9. Personnage … Dr Asmaa BENGUEDDACH 9 class Personnage { // Attributs String nom; int energie; int dureeVie; // Méthodes rencontrer (Personnage) transformation() … }
  • 10. Héritage Dr Asmaa BENGUEDDACH 10 class Personnage { String nom; int energie; int dureeVie; rencontrer (Personnage) transformation() } class Guerrier { Arme arme; seBattre(Personnage) AttaqueFourdoyante(Personnage) } class Magicien{ Baguette baguette; Batton batton; jeterUnSort(Personnage); Invisibilité(); } class Monstre { Griffe griffe; attaqueSanguinaire(Person nage) attaqueNocturne(Personnag e)} class Sorcier { Livre livreMagique; Voler() invoquerLesMorts()} «est-un»«est-un»«est-un» «est-un»
  • 11. L’Héritage ✧ Représente la relation « est-un ». ✧ Permet de créer des classes plus spécialisées « sous-classes » à partir de classes plus générales déjà existantes, appelées « super-classes ». ✧ Évite la duplication du code Dr Asmaa BENGUEDDACH 11 Classe Sous-ClasseSous-Classe Sous-Classe Héritage spécialisation
  • 12. Caractéristiques de l’Héritage ✧ Un C1 est (aussi) de type C. ✧ C1 hérite de C : – Les attributs et méthode. – Mais pas ses constructeurs. ✧ De plus : – On peut définir des attributs et méthode supp => ENRICHISSEMENT – On peut redéfinir certaines méthodes de C => SPÉCIALISATION Dr Asmaa BENGUEDDACH 12 C C1
  • 13. Dr Asmaa BENGUEDDACH 13Dr Asmaa BENGUEDDACH 13Dr Asmaa BENGUEDDACH 13 Définition — Un rectangle est un quadrilatère qui possède quatre angles droits. Ensuite compléter sa définition en le reliant aux autres objets du même domaine.
  • 14. Passons à la pratique … class nomSousClasse extends nomSuperClasse { /*déclaration des attributs et des méthode de la sous classe*/ … } Dr Asmaa BENGUEDDACH 14 class Carre extends Rectangle{ … }
  • 15. Exemple d’1 attribut hérité Dr Asmaa BENGUEDDACH 15 class Personnage{ //… private int energie; } class Guerrier extends Personnage{ //… public void seBattre(Personnage lePauvre) if(energie>0)&&(energie> lePauvre.energie) //frapper le perso } }
  • 16. Droit d’accès "protected" ✧ C1 n’a pas le droit d’accès aux membres (attributs ou méthodes) privés hérités de C. ✧ Si C veut permettre à Ci d’accèder à un membre donné, elle doit le déclarer comme protégé (protected). ✧ Peu recommandé => nuit à une bonne encapsulation en Java. Dr Asmaa BENGUEDDACH 16
  • 17. Exemple d’1 attribut hérité Dr Asmaa BENGUEDDACH 17 class Personnage{ //… protected int energie; } class Guerrier extends Personnage{ //… public void seBattre(Personnage lePauvre) if(energie>0)&&(energie>lePauvre.energie) // Correct //frapper le perso } }
  • 18. Exemple d’1 méthode héritée Class Jeu{ Guerrier g=new Guerrier(…); Monstre m= new Monstre(…); … g.rencontrer(m); … } Dr Asmaa BENGUEDDACH 18 class Personnage { String nom; int energie; int dureeVie; rencontrer (Personnage) transformation() } class Guerrier { Arme arme; seBattre(Personnage ) AttaqueFourdoyante( Personnage) } «est-un»
  • 19. Sauf les Constructeurs !!!? Dr Asmaa BENGUEDDACH 19
  • 20. Comment faire ? ✧ Le constructeur de C1, doit initialiser : ✧ Ses attributs propres. ✧ Les attributs hérités C. ✧ Mais !!!! ✧ Ce n’est pas aux constructeurs de C1 de réaliser l’initialisation des attributs hérités ✧ Solution: invoquer les constructeurs de C avec Super() Dr Asmaa BENGUEDDACH 20
  • 21. Passons à la pratique … nomSousClasse (liste des paramètres){ /*Arguments : liste d’arguments attendus par un des constructeurs de la super-classe */ super(Arguments) // initialisation des attributs de la sous-classe ici var1 = …. var2 = .… } Dr Asmaa BENGUEDDACH 21
  • 22. Exemple (1) de constructeur Dr Asmaa BENGUEDDACH 22 class Carre extends Rectangle{ public Carre(double taille) { super(taille, taille); //… } } Parfois il n’est pas nécessaire d’avoir des attributs supplémentaires …
  • 23. Dr Asmaa BENGUEDDACH 23 Avez vous une question ? N’oubliez pas votre prochaine mission … Next …
  • 25. Exemple d’1 redéfinition ✧ Redéfinir la méthode rencontrer(Personnage p) pour la classe Monstre. Dr Asmaa BENGUEDDACH 25 class Monstre extends Personnage{ … Rencontrer(Personnage p){ frapper(p); } }
  • 26. Exemple (2) de constructeur Dr Asmaa BENGUEDDACH 26 class FigureGeometrique{ protected Position position; public FigureGeometrique(Position position){ position = new Position(x,y); } //… } Class Rectangle extends FormeGeometrique{ protected double longueur; protected double hauteur; public Rectangle(Position p, double longueur, double hauteur) { super(x, y); this.largeur = longueur; this.hauteur = hauteur; //…} }
  • 27. Ordre d’appel des constructeurs Dr Asmaa BENGUEDDACH 27 class A a1 a2 m1(…) m2(…) class B b1 m3(…) m4(…) class A c1 c2 m5(…) A(…){ a1= … a2= … } B(…){ super(…); b1= … } C(…){ super(…); c1= … c2= … } C monC = new C(…);
  • 28. Dr Asmaa BENGUEDDACH 28 Ordre d’appel des constructeurs Dr Asmaa BENGUEDDACH 28 class A a1 a2 m1(…) m2(…) class B b1 m3(…) m4(…) class A c1 c2 m5(…) A(…){ a1= … a2= … } B(…){ super(…); b1= … } C(…){ super(…); c1= … c2= … } C monC = new C(…); En Java la Résolution des liens est Dynamique
  • 29. 29 class Premiere { public Premiere() { System.out.println("constructe ur de Premiere"); }} class Quatrieme extends Troisieme { public Quatrieme(double d) { super(14); System.out.println("constructeur de Quatrieme");}} class Deuxieme extends Premiere { public Deuxieme(boolean b) { super(); System.out.println("constructe ur de Seconde");} } class Troisieme extends Premiere { public Troisieme(int i) { super(); System.out.println("constructeur de Troisieme"); }} new Premiere(); System.out.println("===================="); new Deuxieme(true); System.out.println("===================="); new Troisieme(15); System.out.println("===================="); new Quatrieme(12.3);
  • 30. Dr Asmaa BENGUEDDACH 3030 new Cinquieme(); System.out.println("================"); new Sixieme(); Premiere Cinquieme Sixieme public Premiere() { System.out.println("cons tructeur de Premiere"); } public Cinquieme() { System.out.println("con structeur de Cinquieme"); } public Sixieme () { System.out.println("cons tructeur de Sixieme"); }}
  • 31. Dr Asmaa BENGUEDDACH 3131 class Cinquieme extends Premiere { public Cinquieme() { System.out.println("constructe ur de Cinquieme"); }} class Sixieme extends public Cinquieme { public Sixieme () { System.out.println("constructe ur de Sixieme"); }} new Cinquieme(); System.out.println("========== ======"); new Sixieme(); class Premiere { public Premiere() { System.out.println("constructe ur de Premiere"); }}
  • 32. Dr Asmaa BENGUEDDACH 32 class Septieme extends Premiere{ public Septieme(int i){ System.out.println("constructeur de Septieme"); } } class Huitieme extends Septieme{ public Huitieme(){ System.out.println("constructeur de Huitieme"); } } ✧ Le programme suivant provoque une erreur à la compilation : la classe Huitieme est incorrecte?
  • 33. 33 class Neuvieme extends Premiere{ public Neuvieme(int i){ System.out.println("premier constructeur de Neuvieme");} public Neuvieme(boolean b){ System.out.println("second constructeur de Neuvieme");}} class Dixieme extends Neuvieme{ public Dixieme(double d){ super(true); System.out.println("premier constructeur de Dixieme");} public Dixieme(int x, boolean y){ super(x); System.out.println("second constructeur de Dixieme"); }}
  • 34. 34 class Neuvieme extends Premiere{ Neuvieme(int i){ System.out.println("premier constructeur de Neuvieme");} Neuvieme(boolean b){ System.out.println("second constructeur de Neuvieme");}} class Dixieme extends Neuvieme{ Dixieme(double d){ super(true); System.out.println("premier constructeur de Dixieme");} Dixieme(int x, boolean y){ super(x); System.out.println("second constructeur de Dixieme"); }} ….. public static void main(String[] args){ new Dixieme(10.5); System.out.println("============================="); new Dixieme(45, true);}
  • 35. Résumé (1) ✧ Chaque constructeur de C1 doit appeler super(…). ✧ Les arguments fournis à super doivent être au moins ceux corr à l’un des constructeurs de C. ✧ L’appel super() doit être la toute 1ère instruction. ✧ Erreur si l’appel vient plus tard ou 2 fois. ✧ Aucune une autre méthode ne peut appeler super (…) Dr Asmaa BENGUEDDACH 35
  • 36. ✧ Et si on oublie l’appel à super(…) ? ✧Appel automatique à super(). ✧Pratique parfois, mais erreur si le constructeur par défaut n’existe pas. ✧Rappel: le constructeur par défaut est particulier. ✧Il est existe par défaut pour chaque classe qui n’a aucun autre constructeur ✧Il disparaît dès qu’il y a un autre constructeur ✧ Pour éviter des problèmes avec la hiérarchie de classes: ✧Toujours déclarer au moins un constructeur ✧Toujours faire l’appel à super(…) Dr Asmaa BENGUEDDACH 36 Résumé (2)
  • 37. Activité 1: Constructeur -1 37 Student student = new Student()
  • 39. Règle 1: Le Surclassement (Upcasting) Règle 2: Le Transtypage (downcasting) Règle 3: Lien dynamique. Règle 4: Le Polymorphisme Règle 5: La Surcharge Dr Asmaa BENGUEDDACH 39 Maîtrise des 5 règles
  • 41. Règle 1: UpCasting une référence déclarée de type A = une référence vers un objet de type B 41
  • 42. Règle 2: DownCasting ClasseX obj = new ClasseA(); //UpCasting ClasseA a = (ClasseA) obj; //DownCasting 42
  • 43. Règle 2: DownCasting ClasseX obj = new ClasseA(); //UpCasting ClasseA a = (ClasseA) obj; //DownCasting 43 c = new F(); F f = (F) c ;
  • 44. Règle 3: Lien Dynamique • Que va donner e.affiche() ? Etudiant e = new EtudiantSportif("BENALI","Yanis",25,..,"Tennis",..); e.affcihe(); 44
  • 45. Activité 2 45 Parent p = new Child(); p.show(); p.OnlyParentShow(); p.OnlyChildShow();
  • 46. Activité 2 46 Parent p = new Child(); Child c = p; c.show(); c.OnlyParentShow(); c.OnlyChildShow();
  • 47. Activité 2 47 Parent p = new Child(); Child c =(Child) p; c.show(); c.OnlyParentShow(); c.OnlyChildShow();
  • 48. Activité 2 48 Parent m = new Parent(); m.show(); m.OnlyParentShow(); m.OnlyChildShow(); Child c1 = m;
  • 49. Règle 4: Polymorphisme Polymorphisme = Lien Dynamique + Upcasting 49