SlideShare une entreprise Scribd logo

POO Java Chapitre 4 Heritage et Polymorphisme

POO Java Chapitre 4 Heritage et Polymorphisme par Mouna Torjmen Khemakhem, ENIS 2017-2018

1  sur  39
Chapitre 4
Héritage et polymorphisme
1
Mouna Torjmen Khemakhem
Notion d’héritage
Personne
Nom
cin
anneeNaiss
Etudiant
Nom
cin
anneeNaiss
Employe
nom
cin
anneeNaiss
-Définition de 3 classes
-Duplication de code.
-Une modification faite sur un attribut (ou méthode) commun doit être
refaite dans les autres classes.
anneeNaiss
age()
anneeNaiss
note1,note2
age()
moyenne()
anneeNaiss
prixHeure
nbreHeure
age()
salaire()
2
Limites
Mouna Torjmen Khemakhem
Personne
Nom
cin
anneeNaiss
age()
Placer dans la classe mère tous les attributs et
toutes les méthodes communs à toutes les
classes.
Super-classe
Héritent de
Solution
Notion d’héritage
Les classes filles ne comportent que les
attributs ou méthodes plus spécifiques.
Les classes filles héritent automatiquement
les attributs (et les méthodes) qui n'ont pas
besoin d'être ré-écrits.
Sous-classes
Héritent de
3
Etudiant
note1,note2
moyenne()
Employe
prixHeure
nbreHeure
salaire()
Mouna Torjmen Khemakhem
+Réutilisation du code
+Une seule modification des attributs ( ou
méthodes) en commun
Notion d’héritage
Personne
Nom
cin
anneeNaiss
age()
Super-classe
Héritent de
Solution
4
Sous-classes
Héritent de
Etudiant
note1,note2
moyenne()
Employe
prixHeure
nbreHeure
salaire()
Mouna Torjmen Khemakhem
class Personne {
String nom;
int cin, anneeNaiss;
int age(){
class Etudiant extends Personne {
float note1,note2;
public float moyenne (){
L’héritage en JAVA
int age(){
return 2014- anneeNaiss;
}
public float moyenne (){
return ((note1+note2)/2);}
}
5
Mouna Torjmen Khemakhem
Une classe peut avoir plusieurs sous-classes.
Une super-classe
L’héritage en JAVA
Personne
Nom
cin
anneeNaiss
age()
Plusieurs sous-classes
Chercheur
articles
rechercher()
6
age()
Etudiant
note1,note2
moyenne()
Employe
prixHeure
nbreHeure
salaire()
Mouna Torjmen Khemakhem

Recommandé

POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 ExceptionsMouna Torjmen
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetMouna Torjmen
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
POO Java Introduction
POO Java IntroductionPOO Java Introduction
POO Java IntroductionMouna 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
 

Contenu connexe

Tendances

Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Houssem Hamrouni
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec JavaPapa Cheikh Cisse
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
POO Java Chapitre 3 Collections
POO Java Chapitre 3 CollectionsPOO Java Chapitre 3 Collections
POO Java Chapitre 3 CollectionsMouna Torjmen
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1vangogue
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java HéritageNadaBenLatifa
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptionsAmir Souissi
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriMansouri Khalifa
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 

Tendances (20)

Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Cours java
Cours javaCours java
Cours java
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)Polymorphisme (cours, résumé)
Polymorphisme (cours, résumé)
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
POO Java Chapitre 3 Collections
POO Java Chapitre 3 CollectionsPOO Java Chapitre 3 Collections
POO Java Chapitre 3 Collections
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 

Similaire à POO Java Chapitre 4 Heritage et Polymorphisme

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äß Ŕî
 
Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdfHamzaElgari
 
Enrichissez vos classes avec extends
Enrichissez vos classes avec extendsEnrichissez vos classes avec extends
Enrichissez vos classes avec extendsAsmaa BENGUEDDACH
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIJihenHedhli1
 

Similaire à POO Java Chapitre 4 Heritage et Polymorphisme (6)

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
 
Cours5-heritage.pptx
Cours5-heritage.pptxCours5-heritage.pptx
Cours5-heritage.pptx
 
Chap 4 L'heritage.pdf
Chap 4 L'heritage.pdfChap 4 L'heritage.pdf
Chap 4 L'heritage.pdf
 
Enrichissez vos classes avec extends
Enrichissez vos classes avec extendsEnrichissez vos classes avec extends
Enrichissez vos classes avec extends
 
Héritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLIHéritage et polymorphisme- Jihen HEDHLI
Héritage et polymorphisme- Jihen HEDHLI
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 

Plus de Mouna Torjmen

Plus de Mouna Torjmen (6)

TIC & E-Learning
TIC & E-LearningTIC & E-Learning
TIC & E-Learning
 
Apprentissage Par Projet APP
Apprentissage Par Projet APPApprentissage Par Projet APP
Apprentissage Par Projet APP
 
Chapitre 4 no sql
Chapitre 4 no sqlChapitre 4 no sql
Chapitre 4 no sql
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 
Chapitre1 introduction
Chapitre1 introductionChapitre1 introduction
Chapitre1 introduction
 

Dernier

Automate--Programmable--Industrielle.ppt
Automate--Programmable--Industrielle.pptAutomate--Programmable--Industrielle.ppt
Automate--Programmable--Industrielle.pptssuser87efe5
 
Statique_des_solidesStatique_des_solidesStatique_des_solides
Statique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solides
Statique_des_solidesStatique_des_solidesStatique_des_solidesAbdelaliYacoubi
 
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1 Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1 Institut de l'Elevage - Idele
 
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2Institut de l'Elevage - Idele
 
Rapport de fin d'étude en sur le dimensionnement solaire .pdf
Rapport de fin d'étude en sur le dimensionnement solaire .pdfRapport de fin d'étude en sur le dimensionnement solaire .pdf
Rapport de fin d'étude en sur le dimensionnement solaire .pdfZakaria156221
 

Dernier (6)

Le revenu des exploitations bovins viande - 2023
Le revenu des exploitations bovins viande - 2023Le revenu des exploitations bovins viande - 2023
Le revenu des exploitations bovins viande - 2023
 
Automate--Programmable--Industrielle.ppt
Automate--Programmable--Industrielle.pptAutomate--Programmable--Industrielle.ppt
Automate--Programmable--Industrielle.ppt
 
Statique_des_solidesStatique_des_solidesStatique_des_solides
Statique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solidesStatique_des_solides
Statique_des_solidesStatique_des_solidesStatique_des_solides
 
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1 Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 1
 
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2
Webinaire - INOSYS Réseaux d'élevage Bovins Viande - Partie 2
 
Rapport de fin d'étude en sur le dimensionnement solaire .pdf
Rapport de fin d'étude en sur le dimensionnement solaire .pdfRapport de fin d'étude en sur le dimensionnement solaire .pdf
Rapport de fin d'étude en sur le dimensionnement solaire .pdf
 

POO Java Chapitre 4 Heritage et Polymorphisme

  • 1. Chapitre 4 Héritage et polymorphisme 1 Mouna Torjmen Khemakhem
  • 2. Notion d’héritage Personne Nom cin anneeNaiss Etudiant Nom cin anneeNaiss Employe nom cin anneeNaiss -Définition de 3 classes -Duplication de code. -Une modification faite sur un attribut (ou méthode) commun doit être refaite dans les autres classes. anneeNaiss age() anneeNaiss note1,note2 age() moyenne() anneeNaiss prixHeure nbreHeure age() salaire() 2 Limites Mouna Torjmen Khemakhem
  • 3. Personne Nom cin anneeNaiss age() Placer dans la classe mère tous les attributs et toutes les méthodes communs à toutes les classes. Super-classe Héritent de Solution Notion d’héritage Les classes filles ne comportent que les attributs ou méthodes plus spécifiques. Les classes filles héritent automatiquement les attributs (et les méthodes) qui n'ont pas besoin d'être ré-écrits. Sous-classes Héritent de 3 Etudiant note1,note2 moyenne() Employe prixHeure nbreHeure salaire() Mouna Torjmen Khemakhem
  • 4. +Réutilisation du code +Une seule modification des attributs ( ou méthodes) en commun Notion d’héritage Personne Nom cin anneeNaiss age() Super-classe Héritent de Solution 4 Sous-classes Héritent de Etudiant note1,note2 moyenne() Employe prixHeure nbreHeure salaire() Mouna Torjmen Khemakhem
  • 5. class Personne { String nom; int cin, anneeNaiss; int age(){ class Etudiant extends Personne { float note1,note2; public float moyenne (){ L’héritage en JAVA int age(){ return 2014- anneeNaiss; } public float moyenne (){ return ((note1+note2)/2);} } 5 Mouna Torjmen Khemakhem
  • 6. Une classe peut avoir plusieurs sous-classes. Une super-classe L’héritage en JAVA Personne Nom cin anneeNaiss age() Plusieurs sous-classes Chercheur articles rechercher() 6 age() Etudiant note1,note2 moyenne() Employe prixHeure nbreHeure salaire() Mouna Torjmen Khemakhem
  • 7. Une classe ne peut avoir qu’une seule classe mère Personne nom cin anneeNaiss age() EtreHumain peau yeux respirer() L’héritage en JAVA pas d'héritage multiple en java class Etudiant extendsextendsextendsextends Personne, EtreHumain Etudiant Note1,note1 moyenne() 7 Mouna Torjmen Khemakhem
  • 8. Etudiant hérite de Personne EtudiantENIS hérite de Etudiant Personne Nom cin dateNaiss age() EtudiantENIS hérite de Personne L’héritage en JAVA Héritage en cascade Etudiant note1,note2 moyenne() EtudiantENIS noteOption moyenneOption() Etudiant etudiant=new Etudiant() etudiant.age(); etudiant.moyenne () etudiant.moyenneOption(); EtudiantENIS etudiantTelecom=new EtudiantENIS () etudiantENIS.age(); etudiantENIS.rmoyenne() etudiantENIS.moyenneOption(); 8 Mouna Torjmen Khemakhem
  • 9. Docteur travailHopital:boolean traiterPatient() •Quel est le nombre d’attributs de Chirurgien ? •Quel est le nombre d’attributs de MedecinDeFamille ? Héritage en cascade L’héritage en JAVA traiterPatient() MedecinDeFamille faitVisites: boolean donnerConseil() Chirurgien faireUneIncision: boolean •Combien de méthodes Docteur a-t-il ? •Combien de méthodes MedecinDeFamille a-t-il ? •MedecinDeFamille peut-il invoquer traiterPatient() ? •MedecinDeFamille peut-il invoquer faireUneIncision ? 9 Mouna Torjmen Khemakhem
  • 10. Héritage et encapsulation public class Personne { public String nom; protected String prenom; int age; private long cin; Package 1 Package 2 public class Employe extends Personne private long cin; } class Etudiant extends Personne Etudiant hérite nom prenom age Employe hérite nom prenom 10 Mouna Torjmen Khemakhem
  • 11. Le mot-clé super Pour manipuler un attribut de la super-classe : super.cin Le mot-clé super permet de désigner la superclasse, super permet d'accéder aux attributs et méthodes de la super-classe super.cin Pour manipuler une méthode de la super-classe : super.age() Pour faire appel au constructeur de la super-classe: super(nom, cin) 11 Mouna Torjmen Khemakhem
  • 12. Constructeurs et héritage class Personne { private String nom; private long cin; class Etudiant extends Personne { private float note1,note2; Constructeur par défaut private long cin; public Presonne(){ nom=“Mohamed”; cin=00000000; } } public Etudiant(){ super(); note1=0.0f; note2=0.0f; } } super fait appel au constructeur par défaut de la classe mère 12 Mouna Torjmen Khemakhem
  • 13. Constructeurs et héritage class Personne { private String nom; private long cin; class Etudiant extends Personne { private float note1,note2; Constructeur surchargé private long cin; public Presonne(String nom, long cin){ this.nom=nom; this.cin=cin; } } public Etudiant(String nom, long cin, int note1, int note 2){ super(nom, cin); this.note1=note1; this.note2=note2; } } super fait appel au constructeur surchargé de la classe mère 13 Mouna Torjmen Khemakhem
  • 14. Constructeurs et héritage public class Animal { La première instruction dans le constructeur de la sous-classe doit être l’appel au constructeur de la superclasse avec le mot clé super. Si on ne fait pas d’appel explicite au constructeur de la superclasse, c’est le constructeur par défaut de la superclasse qui est appelé implicitement. public class Animal { public int nbPattes; public Animal(int nbPattes) { this.nbPattes = nbPattes; } } public class Chat extends Animal{ } 14 Mouna Torjmen Khemakhem
  • 15. Constructeurs et héritage public class Animal { public int nbPattes; public Animal(int nbPattes) { this.nbPattes = nbPattes; } } public class Chat extends Animal{ public Chat(){ super(); } } Un constructeur surchargé est crée pour la classe Animal le constructeur par défaut n'existe pas. Erreur à la compilation lors de l’exécution de super() Constructeur par défaut Appel implicite à super 15 Mouna Torjmen Khemakhem
  • 16. Constructeurs et héritage public class Animal { public int nbPattes; public Animal(){} Solution 1 Déclarer explicitement le constructeur par défaut de la classe mère public Animal(){} public Animal(int nbPattes) { this.nbPattes = nbPattes; } } public class Chat extends Animal{ } 16 Mouna Torjmen Khemakhem
  • 17. Constructeurs et héritage Solution 2 public class Animal { public int nbPattes; Faire un appel explicite au constructeur surchargé de la classe mère public class Chat extends Animal{ public Chat(){ super(4); } } public Animal(int nbPattes) { this.nbPattes = nbPattes; } } 17 Mouna Torjmen Khemakhem
  • 18. Constructeurs et héritage Enchaînement des consctructeurs public class Client extends Humain { public class Humain{ public Humain() { System.out.println(“Je suis un être humain”); } } public class Client extends Humain { public Client (){ System.out.println(“Je suis un client”); } } public class ClientFidele extends Client { public ClientFidele(){ System.out.println(“Je suis un client fidèle”); } } ClientFidele cFidele=new ClientFidele(); 18 Mouna Torjmen Khemakhem
  • 19. Redéfinition des méthodes class Personne { public void lire() { System.out.println(“Je sais lire”); } } •La classe Etudiant hérite la méthode lire() mais on veut} class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un étudiant”); System.out.println(“Je sais lire”); } } méthode lire() mais on veut changer son traitement •On garde la même signature de la méthode lire et on change le corps On parle alors de redéfinition (override) 19 Mouna Torjmen Khemakhem
  • 20. Redéfinition des méthodes class Personne { public void lire() { System.out.println(“Je sais lire”); } }} class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un etudiant”); super.lire(); } } Possibilité de réutiliser le code de la méthode héritée (super) 20 Mouna Torjmen Khemakhem
  • 21. Surchage des méthodes class Personne { public void lire() { System.out.println(“Je sais lire”); } } •On garde la même nom de la méthode, le même type de retour et on change les} class Etudiant extends Personne { public void lire(String titreLivre) { System.out.println(“Je sais lire”); System.out.println(“J’ai lu le livre ”+titreLivre); } } retour et on change les paramètres On parle alors de surcharge (overload) 21 Mouna Torjmen Khemakhem
  • 22. Surcharge vs redéfinition class Personne { public void lire() { System.out.println(“Je sais lire”); } } surcharge redéfinition class Etudiant extends Personne { public void lire(String titreLivre) { System.out.println(“Je sais lire”); System.out.println(“J’ai lu le livre ”+titreLivre); } } surcharge Etudiant possède deux méthodes • lire() •lire(String) redéfinition Etudiant possède une seule méthode •lire() class Etudiant extends Personne { public void lire() { System.out.println(“Je suis un étudiant”); super.lire(); } } 22 Mouna Torjmen Khemakhem
  • 23. Le mot-clé final Une classe peut protéger une méthode afin d'éviter qu'elle ne soit redéfinie dans ses sous-classes. En Java, on va simplement ajouter le modificateur final dans la signature de la méthode. public final void lire() Empêcher la redéfinition public final void lire() Une classe déclarée final ne peut pas être dérivée Permet d’interdire tout héritage pour cette classe qui ne pourra pas être une classe mère Toutes les méthodes à l’intérieur de la classe final seront implicitement finales final class Personne Empêcher l’hériatage 23 Mouna Torjmen Khemakhem
  • 24. La classe Object Toutes les classes java héritent implicitement de la classe Object. La classe Object est l’ancêtre de toutes les classes Object toString() equals() … Personne nom cin lire() Etudiant moyenne reviser() Employe salaire travailler() Chercheur articles rechercher() Docteur travailALHopital:boolean traiterPatient() MedecinDeFamille faitVisites: boolean donnerConseil() Chirurgien faireUneIncision: boolean Humain Client ClientFidele 24 Mouna Torjmen Khemakhem
  • 25. La méthode equals • La méthode equals détermine si deux objets sont égaux ou non. • Son implémentation dans la classe Object vérifie que les références d’objets sont identiques. • On aura souvent besoin de redéfinir la méthode equals : deux objets seront égaux quand ils auront le même état.seront égaux quand ils auront le même état. public boolean equals(Object obj) { if(obj instanceof Personne){ Personne personne = (Personne) obj; if((nom.equals(personne.nom)) && (cin==personne.cin)) { return true; } return false; } Redéfinition de la méthode equals pour la classe Personne Deux personnes sont égaux s’ils ont le même cin et le même nom 25 Mouna Torjmen Khemakhem
  • 26. Polymorphisme • N’importe quel objet en Java qui peut passer d’une relation « est un » peut être considéré polymorphe. • Le polymorphisme est le fait de référencer• Le polymorphisme est le fait de référencer une classe fille avec un référence déclaré de type une classe mère. Animal Dog Animal myDog = new Dog(); Référence déclaré en tant qu’Animal(). Objet crée en tant que Dog(). 26 Mouna Torjmen Khemakhem
  • 27. Polymorphisme • Pourquoi? -Ecrire un code flexible. -Ecrire un code nettoyé :-Ecrire un code nettoyé : –plus efficace. –plus simple. -Facile à développer. -Facile à étendre. 27 Mouna Torjmen Khemakhem
  • 28. Tableau polymorphique Avec le polymorphisme : le type de la référence peut être la classe mère de l’objet instancié. Soit : Animal [ ] animals = new Animal [3]; AnimalSoit : Animal [ ] animals = new Animal [3]; Animal CatDog Wolf - Déclarer un tableau de type Animal. - Un tableau qui contiendra des objets de type Animal. 28 Mouna Torjmen Khemakhem
  • 29. Tableau polymorphique • On peut mettre n’importe quelle classe fille de la classe Animal() dans le tableau. animals animals [0] = new Dog(); animals [1] = new Cat(); animals [2] = new Wolf(); 29 Mouna Torjmen Khemakhem
  • 31. On va parcourir le tableau et appeler n’importe quelle méthode de manière concrète. Tableau polymorphique 31 Mouna Torjmen Khemakhem
  • 32. Argument polymorphique -Le paramètre Animal peut être n’importe quel animal. -Le vétérinaire donne une piqure à l’animal et lui demande de faire du bruit. N’importe quel animal dans le heap ayant la méthode makeNoise(), fera son bruit. La méthode giveShot() de Vet peut prendre n’importe quel Animal tant que l’objet passé en paramètre est une classe fille de Animal. (la méthode makeNoise() doit être implémentée dans les classes Cat et Dog). 32 Mouna Torjmen Khemakhem
  • 33. Surclassement et Substitution Animal public void eat(){ sout(’’je manges’’) Animal animal; Dog myDog = new Dog(); animal = myDog; animal Animal myDog Dog Dog public void watch(){ sout(’’je gardes’’) } WolfCat sout(’’je manges’’) } public void roam(){ sout(’’je voyages’’) } animal.eat() OK animal.roam() OK animal.watch() KO eat() roam() watch() myDog.eat() OK myDogl.roam() OK myDog.watch() OK 33 Mouna Torjmen Khemakhem
  • 34. Surclassement et Substitution On dit que : - l’objet Dog crée est « surclassé ». Il est vu de type Animal de la référence déclarée (animal). - Les fonctionnalités de Dog sont restreintes à celles de Animal. Le chien ne pourra pas Il faut donc substituer animal par : animal.eat() OK animal.roam() OK ((Dog) animal).watch() OK ((Dog) animal).watch(); - Les fonctionnalités de Dog sont restreintes à celles de Animal. Le chien ne pourra pas être un chien de garde (watch()). 34 Mouna Torjmen Khemakhem
  • 35. Lien dynamique Quelle est la méthode appelée ? Wolf w = new Wolf(); Animal makeNoise() eat() sleep() roam() w.makeNoise(); La méthode appelée est celle existante dans la classe du type le plus inférieur dans l’hiérarchie d’héritage gagne ! Canine roam() Wolf makeNoise() eat() w.roam(); w.makeNoise(); w.eat(); w.sleep(); La machine virtuelle JVM commence tout d’abord à voir dans la classe Wolf . Si elle ne trouve pas une correspondance de la version de la méthode, elle commence à grimper l’hiérarchie de l’héritage jusqu’à trouver la bonne méthode. 35 Mouna Torjmen Khemakhem
  • 36. Exemple class ObjetGraphique{ private int x, y ; void setXY (int x, int y){ this.x=x ; this.y=y ; } int getX(){return x ;} int getY(){return y ;}int getY(){return y ;} float surface (){return(0) ;} }// fin de la classe ObjetGraphique class Rectangle extends ObjetGraphique{ float largeur=3, longueur=5 ; void allongerRect(float lg) {longueur+=lg ;} float surface (){return(longueur*largeur) ;} }// fin de la classe Rectangle class Cercle extends ObjetGraphique{ float rayon=2 ; float surface (){ return (rayon*rayon*3.14f) ;} }// fin de la classe Cercle 36 Mouna Torjmen Khemakhem
  • 37. Exemple public class TestObjetGraphique{ public static void main(String[]args){ } 37 Mouna Torjmen Khemakhem
  • 38. Exemple class ObjetGraphique{ private int x, y ; ObjetGraphique(int x, int y){ this.x=x; this.y=y; } void affiche () {System.out.println(" affiche un objet graphique ");}} class Rectangle extends ObjetGraphique{ float largeur, longueur;float largeur, longueur; Rectangle(float la, float lo){ super(2,3); largeur=la; longueur=lo;} void affiche(){ super.affiche(); System.out.println(" affiche un rectangle ");}} class Essai{ public static void main(String [] args){ Rectangle r=new Rectangle(3,5); r.affiche(); } } 38 Mouna Torjmen Khemakhem
  • 39. Exemple ObjetGraphique d ; switch (c){//c est une variable introduite par le clavier case 'o' :d= new ObjetGraphique(); break ; case 'r' : d= new Rectangle(); break ;break ; case 'c' : d= new Cercle() ; break ; } float s=d.surface(); 39 Mouna Torjmen Khemakhem