Constructeurs et classes en Java
Constructeurs et classes en Java
Achref El Mouelhi
[Link]@[Link]
Java
Qu’est ce qu’une classe en POO ?
Java
Qu’est ce qu’une classe en POO ?
Java
Qu’est ce qu’une classe en POO ?
Java
NomClasse
I c
les attributs
ELH
U
L MO
r e f E
les méthodes
ch
c A
Attribut : [visibilité] + type + nom
Méthode : [visibilité] + valeur de retour + nom + arguments ≡
signature : exactement comme les fonctions en procédurale
Java
Particularité du Java
Toutes les classes héritent implicitement (pas besoin d’ajouter
extends) d’une classe mère Object. I
c
H
EL telles que
La classe Object contient plusieurs mU éthodes
toString() (pour transformerM
O
fE L un objet en chaı̂ne de caractère),
h r e
clone() (pour cloner)...
c permet de désigner l’objet courant.
c A
Le mot-clé this
Contrairement à certains LOO, le this n’est pas obligatoire si
aucune ambiguité ne se présente.
Java
Commençons par créer un nouveau projet Java
Aller dans File > New > Java Project
Remplir le champ Project name: avec cours-poo puis cliquer
sur Next I c
H
EL file puis
U
Décocher la case Create [Link]
cliquer sur Finish
L MO
h r e fE
A c
c
Java
Commençons par créer un nouveau projet Java
Aller dans File > New > Java Project
Remplir le champ Project name: avec cours-poo puis cliquer
sur Next I c
H
EL file puis
U
Décocher la case Create [Link]
cliquer sur Finish
L MO
h r e fE
A c [Link] et
c
Créons deux packages
[Link]
Aller dans File > New > Package
Saisir le nom du premier package et valider
Refaire la même chose pour le second
H & H: Research and Training 6 / 76
Classe
Java
Créons deux classes
Une classe Personne dans [Link] contenant
trois attributs : num, nom et prénom
I c
H
Une classe Main dans [Link] contenant le
EL
U
public static void main dans lequel on instanciera la
classe Personne
L MO
f E
chre
c A
Java
Créons deux classes
Une classe Personne dans [Link] contenant
trois attributs : num, nom et prénom
I c
H
Une classe Main dans [Link] contenant le
EL
U
public static void main dans lequel on instanciera la
classe Personne
L MO
f E
A c hre
c
Créons les classes
Aller dans File > New > Class
Saisir le nom du package et celui de la classe
Pour la classe Main, cocher la case public static void
main (String[] args)
H & H: Research and Training 7 / 76
Classe
Java
Contenu de la classe Personne
package [Link];
f E L
hre
Remarques
A c
c
En Java, toute classe a un constructeur par défaut sans paramètres.
Donc, les attributs ne seront pas accessibles depuis la classe Main qui se situe
dans un package différent ([Link])
Java
I c
package [Link];
ELH
U
public class Personne {
L MO
public int num;
f E
public String nom;
chre
} c A
public String prenom;
Java
}
c A
}
Java
Hypothèse
Java
Hypothèse
c h r e
c A
Java
Hypothèse
h r e
c de la classe Personne (objet créé)
c A
Étape 2 : instanciation
personne = new Personne();
Java
Hypothèse
h r e
c de la classe Personne (objet créé)
c A
Étape 2 : instanciation
personne = new Personne();
Java
Java
Java
Contenu de la classe Main
package [Link];
Java
Contenu de la classe Main
package [Link];
Java
Explication
Java
Explication
Java
@Override
I c
Une annotation (appelé aussi décorateur par MicroSoft)
H
EL qui appartient à
Pour nous rappeler qu’on redéfinit une méthode
U
MO
la classe mère (ici Object)
fE L
c h r e
c A
Java
@Override
I c
Une annotation (appelé aussi décorateur par MicroSoft)
H
EL qui appartient à
Pour nous rappeler qu’on redéfinit une méthode
U
MO
la classe mère (ici Object)
fE L
c h r e
c A
En exécutant, le résultat est :
Personne [num=1, nom=wick, prenom=john]
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
I c
ELH
U
L MO
f E
chre
c A
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
I
c
Démarche
EL H
U
1
L MO la visibilité à private)
Bloquer l’accès directe aux attributs (mettre
2
r e f E qui contrôlent l’affectation de valeurs
Définir des méthodes publiques
h
aux attributs (lescsetter)
c A
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
I
c
Démarche
EL H
U
1
L MO la visibilité à private)
Bloquer l’accès directe aux attributs (mettre
2
r e f E qui contrôlent l’affectation de valeurs
Définir des méthodes publiques
h
aux attributs (lescsetter)
c A
Convention
Java
Mettons la visibilité private pour tous les attributs de la classe Personne
package [Link];
}
}
Java
Mettons la visibilité private pour tous les attributs de la classe Personne
package [Link];
}
}
Dans la classe Main, les trois lignes suivantes sont soulignées en rouge
[Link] = 1;
[Link] = "wick";
[Link] = "john";
Java
Explication
Les attributs sont privés, donc aucun accès direct ne sera autorisé
I c
ELH
U
L MO
f E
chre
c A
Java
Explication
Les attributs sont privés, donc aucun accès direct ne sera autorisé
I c
ELH
U
Solution : générer les setters
L MO
f E
hre
Faire clic droit sur la classe Personne
c
c A
Aller dans Source > Generate Getters and Setters...
Cliquer sur chaque attribut et cocher la case
setNomAttribut(...)
Valider
Java
Les trois méthodes générées
public void setNum(int num) {
[Link] = num;
}
public void setNom(String nom) {
}
[Link] = nom;
I c
public void setPrenom(String prenom) {
ELH
[Link] = prenom;
U
}
L MO
f E
chre
c A
Java
Les trois méthodes générées
public void setNum(int num) {
[Link] = num;
}
public void setNom(String nom) {
}
[Link] = nom;
I c
public void setPrenom(String prenom) {
ELH
[Link] = prenom;
U
}
L MO
E
Modifions setNum() pour ne plus accepter de valeurs inférieures à 1
f
public void setNum(int num) {
chre
c A
if (num >= 1){
}
[Link] = num;
}
public void setNom(String nom) {
[Link] = nom;
}
public void setPrenom(String prenom) {
[Link] = prenom;
}
H & H: Research and Training 19 / 76
Classe Le setter
Java
Mettons à jour la classe Main
package [Link];
Java
Mettons à jour la classe Main
package [Link];
Java
Mettons à jour la classe Main
package [Link];
Java
Mettons à jour la classe Main
package [Link];
Java
Hypothèse
c
Si on voulait afficher les attributs (privés) de la classe Personne, un
I
ELH
par un, dans la classe Main sans passer par le toString()
U
L MO
f E
chre
c A
Java
Hypothèse
c
Si on voulait afficher les attributs (privés) de la classe Personne, un
I
ELH
par un, dans la classe Main sans passer par le toString()
U
L MO
f E
Démarche A c hre
c
Définir des méthodes qui retournent les valeurs des attributs (les
getter)
Java
Java
Mettons à jour la classe Main
package [Link];
I c
public static void main(String[] args) {
ELH
Personne personne = new Personne();
U
[Link](1);
L MO
[Link]("wick");
f E
hre
[Link]("john");
c
c A
[Link]([Link]() + " " + personne.
}
getNom() + " " + [Link]());
Java
Mettons à jour la classe Main
package [Link];
I c
public static void main(String[] args) {
ELH
Personne personne = new Personne();
U
[Link](1);
L MO
[Link]("wick");
f E
hre
[Link]("john");
c
c A
[Link]([Link]() + " " + personne.
}
getNom() + " " + [Link]());
Java
Remarques
I c
Pour simplifier la création d’objets, on peut définir un nouveau
ELH
constructeur qui prend en paramètre plusieurs attributs de la
U
classe
L MO
f E
chre
c A
Java
Remarques
I c
Pour simplifier la création d’objets, on peut définir un nouveau
ELH
constructeur qui prend en paramètre plusieurs attributs de la
U
classe
L MO
f E
A c hre
Pour générer un constructeur avec paramètre
1
c
Faire clic droit sur la classe Personne
2 Aller dans Source > Generate Constructor using
Fields...
3 Vérifier que toutes les cases sont cochées et valider
H & H: Research and Training 25 / 76
Classe Le constructeur
Java
Le constructeur généré
public Personne(int num, String nom, String prenom) {
super();
[Link] = num;
[Link] = nom;
I c
[Link] = prenom;
ELH
}
U
L MO
f E
chre
c A
Java
Le constructeur généré
public Personne(int num, String nom, String prenom) {
super();
[Link] = num;
[Link] = nom;
I
c
[Link] = prenom;
EL H
}
U
L
Pour préserver la cohérence, il faut MleOconstructeur contrôle la
que
valeur de l’attribut num
h r e fE
A
public Personne(int c num, String nom, String prenom) {
super();c
if (num >= 1){
[Link] = num;
}
[Link] = nom;
[Link] = prenom;
}
H & H: Research and Training 26 / 76
Classe Le constructeur
Java
I c
public Personne(int num, String nom, String prenom)
{ ELH
U
super();
L MO
[Link](num);
f E
[Link] = nom;
chre
} c A
[Link] = prenom;
Java
Java
Java
Java
Mettons à jour la classe Main
package [Link];
hre
+ " " + [Link]());
c
c A
Personne personne2 = new Personne(2, "bob", "mike");
}
[Link](personne2);
Java
Mettons à jour la classe Main
package [Link];
hre
+ " " + [Link]());
c
c A
Personne personne2 = new Personne(2, "bob", "mike");
}
[Link](personne2);
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs
I c
ELH
U
L MO
f E
chre
c A
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs
I c
ELH
U
Hypothèse
L MO
f E
hre
Et si nous voudrions qu’un attribut ait une valeur partagée par toutes
c
les instances (le nombre d’objets instanciés de la classe Personne)
c A
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs
I c
ELH
U
Hypothèse
L MO
f E
hre
Et si nous voudrions qu’un attribut ait une valeur partagée par toutes
c
les instances (le nombre d’objets instanciés de la classe Personne)
c A
Définition
Un attribut dont la valeur est partagée par toutes les instances de la
classe est appelée : attribut statique ou attribut de classe
Java
Exemple
I
c
Pour créer un attribut contenant le nombreEdes
H
L objets créés à
U
partir de la classe Personne
L MO
Cet attribut doit être e
h r f E sinon chaque objet pourrait avoir sa
static,
A c cet attribut
propre valeur pour
c
Java
Ajoutons un attribut statique nbrPersonnes à la liste d’attributs de la
classe Personne
private static int nbrPersonnes;
I c
ELH
U
L MO
f E
chre
c A
Java
Ajoutons un attribut statique nbrPersonnes à la liste d’attributs de la
classe Personne
private static int nbrPersonnes;
I c
H
Incrémentons notre compteur de personnes dans les constructeurs
EL
U
MO
public Personne() {
super();
nbrPersonnes++;
f E L
}
chre
super(); c A
public Personne(int num, String nom, String prenom) {
[Link](num);
[Link] = nom;
[Link] = prenom;
nbrPersonnes++;
}
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
I c
ELH
U
L MO
f E
chre
c A
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
f E L
[Link]([Link]() + " " +[Link]() + " " +
[Link]());
chre
c A
[Link]([Link]());
Personne personne2 = new Personne(2, "bob", "mike");
[Link](personne2);
[Link]([Link]());
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
f E L
[Link]([Link]() + " " +[Link]() + " " +
[Link]());
chre
c A
[Link]([Link]());
Personne personne2 = new Personne(2, "bob", "mike");
[Link](personne2);
[Link]([Link]());
Le résultat est
1 wick john
1
Personne [num=2, nom=bob, prenom=mike]
2
H & H: Research and Training 33 / 76
Classe Les attributs et méthodes statiques
Java
Exercice
Définir une classe Adresse avec trois attributs privés (rue,
codePostal et ville de type chaı̂ne de caractère
I c
H
Définir un constructeur avec trois paramètres, les getters, les
EL
setters et la méthode toString() U
Oattribut adresse de type
L Mun
f E constructeur à quatre paramètres
Dans la classe Personne, ajouter
Adresse et définir run
h e nouveau
A
et le getter et lecsetter de ce nouvel attribut
c
Dans la classe Main, créer deux objets, un objet de type
Adresse et un de type Personne et lui attribuer l’adresse créée
précédemment
Afficher tous les attributs de cet objet de la classe Personne
Java
I c
L’héritage, quand ?
H
ELplusieurs attributs
U
MO
Lorsque deux ou plusieurs classes partagent
(et méthodes)
fE L
c h
Lorsqu’une Classe1 r eest une sorte de Classe2
c A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
I c
ELH
U
L MO
f E
c hre
c A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau I c
ELH
U
L MO
f E
c hre
c A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau I c
H
ELune sorte de
U
Sémantiquement, enseignant et étudiant sont
personne
L MO
h r e fE
A c
c
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau I
c
H
ELune sorte de
U
Sémantiquement, enseignant et étudiant sont
personne
L MO
h r e f E plusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom c
c
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau I
c
H
ELune sorte de
U
Sémantiquement, enseignant et étudiant sont
personne
L MO
h r e f E plusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom c
c
Donc, on peut mettre en commun les attributs numéro, nom et
prénom dans une classe Personne
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau I
c
H
ELune sorte de
U
Sémantiquement, enseignant et étudiant sont
personne
L MO
h r e f E plusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom c
c
Donc, on peut mettre en commun les attributs numéro, nom et
prénom dans une classe Personne
Les classes Étudiant et Enseignant hériteront (extends) de
la classe Personne
Java
Particularité du Java I
c
L H
L’héritage multiple n’est pas permis parU leE
langage Java
M O
C’est-à-dire, une classe ne
f E L
peut hériter de plusieurs classes
différentes
c h re
c A
Java
c
Cliquer sur Ok et enfin Finish
Refaire la même chose pour la seconde classe
Java
Contenu de la classe Enseignant
package [Link];
Java
Contenu de la classe Enseignant
package [Link];
}
extends est le mot-clé à utiliser pour définir une relation d’héritage
entre deux classes
H & H: Research and Training 39 / 76
Associations particulières entre classes Héritage
Java
Ensuite
I c
E H
L puis générer
Créer un attribut niveau dans la classe Etudiant
U
les getter et setter
L MO
e f Edans la classe Enseignant puis
Créer un attribut salaire
h r
A c et setter
générer les getter
c
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
[Link](3);
[Link]("green");
I c
[Link]("jonas");
ELH
[Link](1700);
U
[Link](enseignant);
L MO
f E
c hre
c A
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
[Link](3);
[Link]("green");
I c
[Link]("jonas");
ELH
[Link](1700);
U
[Link](enseignant);
L MO
f E
reest :
c h
En exécutant, le résultat
A nom=green, prenom=jonas]
Personne c
[num=3,
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
[Link](3);
[Link]("green");
I c
[Link]("jonas");
ELH
[Link](1700);
U
[Link](enseignant);
L MO
f E
reest :
c h
En exécutant, le résultat
A nom=green, prenom=jonas]
Personne c
[num=3,
Java
Et si on génère le toString() dans la classe Enseignant
@Override
public String toString() {
return "Enseignant [salaire=" + salaire + "]";
} I c
ELH
U
L MO
f E
c hre
c A
Java
Et si on génère le toString() dans la classe Enseignant
@Override
public String toString() {
return "Enseignant [salaire=" + salaire + "]";
} I
c
EL H
O U
Pour appeler le toString() deLlaM
classe mère à partir de classe
fille (Enseignant)
h r e fE
@Overridec A
c
public String toString() {
return [Link]() + " Enseignant [salaire
=" + salaire + "]";
}
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
I c
Dans Select super constructor to invoke, sélectionner le constructeur à trois
paramètres
ELH
U
MO
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
et valider
f E L
c hre
c A
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
I c
Dans Select super constructor to invoke, sélectionner le constructeur à trois
paramètres
ELH
U
MO
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
et valider
f E L
c hre
c A
Le constructeur généré
public Enseignant(int num, String nom, String prenom, int salaire) {
super(num, nom, prenom);
[Link] = salaire;
}
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
I c
Dans Select super constructor to invoke, sélectionner le constructeur à trois
paramètres
ELH
U
MO
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
et valider
f E L
c hre
c A
Le constructeur généré
public Enseignant(int num, String nom, String prenom, int salaire) {
super(num, nom, prenom);
[Link] = salaire;
}
Java
I
c
H
On ne peut avoir accès direct à un attribut de la classe mère
ELles attributs ont une
U
MO
C’est-à-dire, on ne peut faire [Link] car
visibilité private L
fd’unEattribut privé de la classe mère, il faut
Pour modifier la valeur
c h r e
c A
les getters/setters
soit utiliser
soit mettre la visibilité des attributs de la classe mère à protected
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
I c
ELH
U
L MO
f E
c hre
c A
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
I c
ELH
U
MO
Ou ainsi
f E L
Personne enseignant = new Enseignant(3, "green", "
jonas", 1700);
c hre
c A
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
I c
ELH
U
MO
Ou ainsi
f E L
Personne enseignant = new Enseignant(3, "green", "
jonas", 1700);
c hre
c A
Ceci est faux
Enseignant enseignant = new Personne(3, "green", "
jonas");
Java
Remarque
1 Pour connaı̂tre la classe d’un objet, on peut utiliser le mot-clé
instanceof
I c
ELH
U
L MO
f E
c hre
c A
Java
Remarque
1 Pour connaı̂tre la classe d’un objet, on peut utiliser le mot-clé
instanceof
I c
EL H
Exemple U
L MO
jonas", 1700); ef
r E
Personne enseignant = new Enseignant(3, "green", "
A c h
[Link](enseignant instanceof Enseignant)
;
c
// affiche true
[Link](enseignant instanceof Personne);
// affiche true
[Link](personne instanceof Enseignant);
// affiche false
H & H: Research and Training 46 / 76
Associations particulières entre classes Héritage
Java
Exercice
1 Créer deux objets de type Etudiant et deux objets de type
Enseignant et stocker les tous dans un seul tableau.
I c
2
ELH
Parcourir le tableau et afficher pour chacun soit le salaire soit le
niveau
U
L MO
f E
c hre
c A
Java
Exercice
1 Créer deux objets de type Etudiant et deux objets de type
Enseignant et stocker les tous dans un seul tableau.
I c
2
ELH
Parcourir le tableau et afficher pour chacun soit le salaire soit le
niveau
U
L MO
f E
re on peut utiliser le raccourci de for
Pour parcourir unc h
tableau,
A [] = { personne, personne2,
Personne
cpersonnes
enseignant };
for(Personne perso : personnes) {
[Link](perso);
}
Java
L’agrégation
Java
L’agrégation
Java
Comment coder des relations d’agrégation et de composition en Java ?
Véhicule
numImmat
marque
modèle
I c
ELH
U
L MO
f E
c hre
Moteur c A
Chssis
num id
poids matière
Java
La classe Châssis
public class Chassis {
private int id;
private String matiere;
public int getId() {
I c
return id;
ELH
} U
public void setId(int id) {
L MO
[Link] = id;
f E
}
c hre
c A
public String getMatiere() {
return matiere;
}
public void setMatiere(String matiere) {
[Link] = matiere;
}
}
Java
La classe Moteur
public class Moteur {
private int num;
private float poids;
public int getNum() {
I c
return num;
ELH
} U
public void setNum(int num) {
L MO
[Link] = num;
f E
}
c hre
c A
public float getPoids() {
return poids;
}
public void setPoids(float poids) {
[Link] = poids;
}
}
La classe Véhicule
public class Vehivule {
private Moteur moteur;
private final Chassis chassis;
public Vehivule(Chassis chassis) {
[Link] = chassis;
}
public Moteur getMoteur() {
return moteur;
I c
}
ELH
public void setMoteur(Moteur moteur) {
U
}
[Link] = moteur;
L MO
f E
hre
}
c
c A
La classe Véhicule
public class Vehivule {
private Moteur moteur;
private final Chassis chassis;
public Vehivule(Chassis chassis) {
[Link] = chassis;
}
public Moteur getMoteur() {
return moteur;
I c
}
ELH
public void setMoteur(Moteur moteur) {
U
}
[Link] = moteur;
L MO
f E
hre
}
c
Explication c A
un composant est déclaré final et instanciable une seule fois au moment de
l’instanciation de l’objet composite
Java
Pour tester
public class Main {
public static void main(String[] args) {
Chassis chassis = new Chassis();
I c
[Link](100);
ELH
[Link]("fer");
U
Vehivule vehivule = new Vehivule(chassis);
L MO
Moteur moteur = new Moteur();
f E
[Link](100);
c hre
c A
[Link](500f);
[Link](moteur);
// pas de méthode permettant de modifier le châ
ssis d’un véhicule
}
}
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
I c
ELH
U
L MO
f E
c hre
c A
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
I c
ELH
U
MO{
Si on déclare la classe Personne abstraite
fE
public abstract class Personne L
...
c h r e
}
c A
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
I c
ELH
U
MO{
Si on déclare la classe Personne abstraite
fE
public abstract class Personne L
...
c h r e
}
c A
Tout ce code sera souligné en rouge
Personne personne = new Personne();
...
Personne personne2 = new Personne(2, "bob", "mike");
H & H: Research and Training 54 / 76
Classe et méthode abstraites
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
I
c
H
EéeLpar les classes filles
U
Une méthode abstraite doit être implément
de la classe abstraite
L MO
h r e fE
A c
c
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
I
c
H
EéeLpar les classes filles
U
Une méthode abstraite doit être implément
de la classe abstraite
L MO
h r e fE
c abstraite afficherDetails() dans
c A
Déclarons une méthode
Personne
public abstract void afficherDetails();
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
I
c
H
EéeLpar les classes filles
U
Une méthode abstraite doit être implément
de la classe abstraite
L MO
h r e fE
c abstraite afficherDetails() dans
c A
Déclarons une méthode
Personne
public abstract void afficherDetails();
I c
ELH
U
L MO
f E
c hre
c A
Le code généré
@Override
public void afficherDetails() {
I c
// TODO Auto-generated method stub
ELH
}
U
L MO
f E
c hre
c A
Le code généré
@Override
public void afficherDetails() {
I c
// TODO Auto-generated method stub
ELH
}
U
L MO
Dans Enseignant
f E
@Override
c hre
c A
public void afficherDetails() {
}
[Link](getPrenom() + " " + getNom() + " " + salaire);
Le code généré
@Override
public void afficherDetails() {
I c
// TODO Auto-generated method stub
ELH
}
U
L MO
Dans Enseignant
f E
@Override
c hre
c A
public void afficherDetails() {
}
[Link](getPrenom() + " " + getNom() + " " + salaire);
Dans Etudiant
@Override
public void afficherDetails() {
[Link](getPrenom() + " " + getNom() + " " + niveau);
}
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
I c
"jonas", 1700);
ELH
U
MO
[Link]();
f E L
c hre
c A
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
I c
"jonas", 1700);
ELH
U
MO
[Link]();
f E L
A c
En exécutant, le résultat est :
hre
c
jonas green 1700
Java
Classe finale
I c
ELH
U
L MO
f E
c hre
c A
Java
Classe finale
Pour tester
I
c
H
EL dans les trois
Commençons par mettre en commentaire afficherNomComplet()
U
MO
classes Personne, Enseignant et Etudiant
L
h r e fE
A c
c
Java
Classe finale
Pour tester
I
c
H
EL dans les trois
Commençons par mettre en commentaire afficherNomComplet()
U
MO
classes Personne, Enseignant et Etudiant
L
h r e
Déclarons la classe Personne fE
finale
A cPersonne {
c
public final class
...
}
Java
Classe finale
Pour tester
I
c
H
EL dans les trois
Commençons par mettre en commentaire afficherNomComplet()
U
MO
classes Personne, Enseignant et Etudiant
L
h r e
Déclarons la classe Personne fE
finale
A cPersonne {
c
public final class
...
}
Java
Méthode finale
I c
ELH
U
L MO
f E
c hre
c A
Java
Méthode finale
Pour tester
I c
H
ELPersonne
Commençons par supprimer le mot-clé final dans la classe
U
L MO
h r e fE
A c
c
Java
Méthode finale
Pour tester
I c
H
ELPersonne
Commençons par supprimer le mot-clé final dans la classe
O U
L M
r e f E
Ajoutons une méthode finale afficherNomComplet() dans Personne
A ch
public final void afficherNomComplet() {
c
[Link]([Link]() + " " + [Link]());
Java
Méthode finale
Pour tester
I c
H
ELPersonne
Commençons par supprimer le mot-clé final dans la classe
O U
L M
r e f E
Ajoutons une méthode finale afficherNomComplet() dans Personne
A ch
public final void afficherNomComplet() {
c
[Link]([Link]() + " " + [Link]());
Java
Remarques
I
c
H
Une classe abstraite ne doit pas forcément contenir une méthode
EL
abstraite U
O contenir une méthode
Mément
Une classe finale ne doit pasLforc
finale
h r e fE
c
Une m
finale
c Afinale ne doit pas forcément être dans une classe
éthode
Java
I c
En Java
E L H
U
MOseule classe
Une classe ne peut hériter que d’une
L
Mais elle peut hériterede
r E interfaces
f plusieurs
A c h
c
Java
Une interface
déclarée avec le mot-clé interface
I c
EL H
comme une classe abstraite (impossible de l’instancier) dont :
O
toutes les méthodes sont abstraites U
L M
h r e fE
tous les attributs sont constants
A
un protocole, un c contrat : toute classe qui hérite d’une interface
c
doit implémenter toutes ses méthodes
pouvant proposée une implémentation par défaut pour les
méthodes en utilisant le mot-clé default
Java
Java
Contenu généré de l’interface IMiseEnForme
package [Link];
Java
Contenu généré de l’interface IMiseEnForme
package [Link];
Java
Java
Java
Le code généré
@Override
public void afficherNomMajuscule() {
I c
// TODO Auto-generated method stub
ELH
U
}
L MO
f E
@Override chre
c A
public void afficherPrenomMajuscule() {
// TODO Auto-generated method stub
Java
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
"jonas", 1700); I c
[Link]();
ELH
U
[Link]();
L MO
f E
chre
c A
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
"jonas", 1700); I c
[Link]();
ELH
U
[Link]();
L MO
f E
chre
c A
En exécutant, le résultat est :
GREEN
JONAS
Java
Définissons un attribut i dans l’interface IMiseEnForme
package [Link];
}
c A
Java
Définissons un attribut i dans l’interface IMiseEnForme
package [Link];
}
c A
Java
Il est possible de définir une implémentation par défaut pour une
méthode d’interface (depuis Java 8)
package [Link];
c h
c A void afficherPrenomMajuscule();
}
public
}
Java
Il est possible de définir une implémentation par défaut pour une
méthode d’interface (depuis Java 8)
package [Link];
c h
c A void afficherPrenomMajuscule();
}
public
}
Remarque
Les classes filles ne sont pas dans l’obligation d’implémenter les
méthodes d’une interface ayant une implémentation par défaut
H & H: Research and Training 70 / 76
Interface
Java
Remarques
Java
Remarques
Java
Énumération
I c
ELH
peut être déclarée, dans une fichier toute seule, dans une classe ou dans une interface
U
L MO
f E
c hre
c A
Java
Énumération
I c
ELH
peut être déclarée, dans une fichier toute seule, dans une classe ou dans une interface
U
L MO
f E
c hre
c A
Pour créer une énumération sous Eclipse
Aller dans File > New > Enum
Valider
Java
Le code généré
package [Link];
I c
}
ELH
U
L MO
f E
chre
c A
Java
Le code généré
package [Link];
I c
}
E LH
U
O Sport
M
Ajoutons des constantes à cette énumération
L
package [Link];
h r e fE
A c{
c
public enum Sport
FOOT,
RUGBY,
TENNIS,
CROSS_FIT,
BASKET
}
Java
I c
Sport sport = [Link];
ELH
[Link](sport); // affiche BASKET
U
L MO
f E
chre
c A
Java
I c
Sport sport = [Link];
ELH
[Link](sport); // affiche BASKET
U
L MO
f E
re l’énumération dans la classe Main
c h
N’oublions pas d’importer
c A
import [Link];
Java
On peut aussi définir une énumération comme une classe avec un ensemble
d’attributs et de méthodes
public enum Sport {
FOOT("foot", 1),
I c
RUGBY("rugby", 7),
TENNIS("tennis", 3),
ELH
U
MO
CROSS_FIT("cross_fit", 4),
BASKET("basket", 6) ;
private final String nom;
f E L
private final int code;
chre
c A
Sport(String nom, int code) {
[Link] = nom;
[Link] = code;
}
public String getNom(){ return [Link]; }
public int getCode(){ return [Link]; }
};
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = [Link];
[Link]([Link]());
// affiche 6
I c
ELH
U
L MO
f E
chre
c A
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = [Link];
[Link]([Link]());
// affiche 6
I
c
L H
El’énum
O
Récupérer l’indice de la constante BASKET U
dans ération
L M
Sport sport = [Link];
e f
rici E
h
[Link]([Link]());
c
c A
// affiche l’indice 4
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = [Link];
[Link]([Link]());
// affiche 6
I
c
L H
El’énum
O
Récupérer l’indice de la constante BASKET U
dans ération
L M
Sport sport = [Link];
e f
rici E
h
[Link]([Link]());
c
c A
// affiche l’indice 4