0% ont trouvé ce document utile (0 vote)
71 vues21 pages

Classes internes et locales en Java

Le document décrit les classes internes en Java, en donnant l'exemple d'une classe interne Categorie définie dans une classe Personne pour stocker des informations liées à l'âge de la personne.

Transféré par

losus007
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
71 vues21 pages

Classes internes et locales en Java

Le document décrit les classes internes en Java, en donnant l'exemple d'une classe interne Categorie définie dans une classe Personne pour stocker des informations liées à l'âge de la personne.

Transféré par

losus007
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Java : classes interne et locale

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[Link]@[Link]

Avril 2018, H & H: Research and Training 1 / 15


Plan

1 Classe interne

2 Classe locale

Avril 2018, H & H: Research and Training 2 / 15


Classe interne

Java

I c
Classe interne ?
ELH
O U
Une classe définie à l’intérieur d’une autre
L M
f E et méthodes de la classe
Pouvant accéder aux attributs
r e
englobante
A ch
c

Avril 2018, H & H: Research and Training 3 / 15


Classe interne

Java
Considérant la classe Personne suivante
package [Link];

public class Personne {


I c

private String nom;
ELH
private String prenom; U
private int age;
L MO
f E
re nom, String prenom, int age) {
h
public Personne(String
c
c A = prenom;
[Link] =

[Link]
nom;

[Link] = age;
}

// + getters et setters
}

Avril 2018, H & H: Research and Training 4 / 15


Classe interne

Java
Hypothèse

Si on décide d’ajouter les deux propriétés suivantes dans la classe


Personne

I c

majoriteSexuelle : acceptant les valeurs majeur et mineur
H
EL adolescent, et
periode : acceptant les valeurs bébé,U
MO
enfant,
adulte
fE L
c h r e
c
A

Avril 2018, H & H: Research and Training 5 / 15


Classe interne

Java
Hypothèse

Si on décide d’ajouter les deux propriétés suivantes dans la classe


Personne

I c

majoriteSexuelle : acceptant les valeurs majeur et mineur
H
EL adolescent, et
periode : acceptant les valeurs bébé,U
MO
enfant,
adulte
fE L
Remarques c h r e
c A
Les deux propriétés dépendent de l’attribut age
On peut donc les regrouper ensemble dans une nouvelle classe
Cette nouvelle classe doit être placée dans Personne pour
qu’elle ait accès à l’attribut age

Avril 2018, H & H: Research and Training 5 / 15


Classe interne

Exemple de code pour la classe Categorie qu’on va définir dans Personne

public class Categorie {


private String majoriteSexuelle;
private String periode;
public Categorie() {
if (age >= 18) {
majoriteSexuelle = "majeur";
periode = "adulte";
I c

} else {
majoriteSexuelle = "mineur";
ELH
if (age < 2)
U
periode = "bébé";
L MO
else if(age < 12)
f E
hre
periode = "enfant";
else
c
c A
periode = "adolescent";

}
}

@Override
public String toString() {
return "Categorie [majoriteSexuelle = " + majoriteSexuelle + ",
periode = " + periode + "]";
}
}

Avril 2018, H & H: Research and Training 6 / 15


Classe interne

Modifions la classe Personne pour intégrer la classe Categorie


public class Personne {

private String nom;


private String prenom;
private int age;
private Categorie categorie;

public Personne(String nom, String prenom, int age) {


I c

[Link] = nom;
ELH
[Link] = prenom;
U
[Link] = age;
categorie = new Categorie();
L MO
f E
hre
}

c
c A
// + getters et setters

@Override
public String toString() {
return "Personne [nom = " + nom + ", prenom = " + prenom + ", age =
" + age + ", categorie = " + categorie + "]";
}

// + code de la classe Categorie


}
Avril 2018, H & H: Research and Training 7 / 15
Classe interne

Java
Pour tester
package [Link];

public class Main {


public static void main(String [] args) {
I c

Personne personne = new Personne("el mouelhi","achref
ELH
", 34);
U
[Link](personne);
L MO
}
f E
}
c hre
c A

Avril 2018, H & H: Research and Training 8 / 15


Classe interne

Java
Pour tester
package [Link];

public class Main {


public static void main(String [] args) {
I c

Personne personne = new Personne("el mouelhi","achref
ELH
", 34);
U
[Link](personne);
L MO
}
f E
}
c hre
c A

Le résultat sera
Personne [nom = el mouelhi, prenom = achref, age=34,
categorie = Categorie [majoriteSexuelle = majeur,
periode = adulte]]

Avril 2018, H & H: Research and Training 8 / 15


Classe interne

Java
Remarques

À la compilation deux fichiers, relatifs à la classe Personne, ont été


générés (d’extension .class)

I c

Le premier : Personne
LH
Le deuxième : Personne$CategorieUE
L MO
h r e fE
A c
c

Avril 2018, H & H: Research and Training 9 / 15


Classe interne

Java
Remarques

À la compilation deux fichiers, relatifs à la classe Personne, ont été


générés (d’extension .class)

I c

Le premier : Personne
LH
Le deuxième : Personne$CategorieUE
L MO
h r e fE
Attention
A c
c
l’age, les valeurs de periode et majoriteSexuelle
En changeant
ne seront pas mises à jour.

Avril 2018, H & H: Research and Training 9 / 15


Classe interne

Java
Remarques

À la compilation deux fichiers, relatifs à la classe Personne, ont été


générés (d’extension .class)

I c

Le premier : Personne
LH
Le deuxième : Personne$CategorieUE
L MO
h r e fE
Attention
A c
c
l’age, les valeurs de periode et majoriteSexuelle
En changeant
ne seront pas mises à jour.

Solution
Utiliser les classes locales.
Avril 2018, H & H: Research and Training 9 / 15
Classe locale

Java

Classe locale ?
I c

EL H
Une classe définie dans une méthode d’une autre
Pouvant accéder aux attributs etM
U
O de la classe
méthodes
englobante
fE L
h r e
caccéder aux paramètres de la méthode où elle est
c
définie
A
Pouvant aussi

Avril 2018, H & H: Research and Training 10 / 15


Classe locale

Java
Considérant la classe Personne suivante
package [Link];

public class Personne {


I c

private String nom;
ELH
private String prenom; U
private int age;
L MO
f E
re nom, String prenom, int age) {
h
public Personne(String
c
c A = prenom;
[Link] =

[Link]
nom;

[Link] = age;
}

// + getters et setters
}

Avril 2018, H & H: Research and Training 11 / 15


Classe locale

Java
Hypothèse
Nous allons garder les attributs de la classe Categorie
majoriteSexuelle : acceptant les mêmes valeurs majeur et
mineur I c

H
EL bébé, enfant,
periode : acceptant aussi les mêmesU
MO
valeurs
adolescent, et adulte
fE L
c h r e
c
A

Avril 2018, H & H: Research and Training 12 / 15


Classe locale

Java
Hypothèse
Nous allons garder les attributs de la classe Categorie
majoriteSexuelle : acceptant les mêmes valeurs majeur et
mineur I c

H
EL bébé, enfant,
periode : acceptant aussi les mêmesU
MO
valeurs
adolescent, et adulte
fE L
c h r e
c A
Remarques

La classe Categorie sera plutôt définie dans une méthode


(afficherDetails()) de la classe Personne
Elle sera aussi instanciée dans cette même méthode

Avril 2018, H & H: Research and Training 12 / 15


Classe locale

Java
La méthode afficherDetails() qu’on va ajouter dans Personne

public void afficherDetails() {


class Categorie {

private String majoriteSexuelle;


private String periode;

public Categorie() {
if (age >= 18) {
I c

majoriteSexuelle = "majeur";
periode = "adulte";
ELH
} else {
U
MO
majoriteSexuelle = "mineur";

L
if (age < 2)
periode = "bébé";

f E
hre
else if(age < 12)
periode = "enfant";
else
c
c A
periode = "adolescent";

}
}

@Override
public String toString() {
return "majoriteSexuelle=" + majoriteSexuelle + ", periode=" + periode;
}
}

Categorie categorie = new Categorie();


[Link]("nom= " + nom + ", prenom = " + prenom + ", " + categorie);
}

Avril 2018, H & H: Research and Training 13 / 15


Classe locale

Java
Pour tester
package [Link];

public class Main {


public static void main(String [] args) {
Personne personne = new Personne("el mouelhi","achref",34);
I c

[Link]();
ELH
U
MO
[Link](10);
[Link]();
}
f E L
}
c hre
c A

Avril 2018, H & H: Research and Training 14 / 15


Classe locale

Java
Pour tester
package [Link];

public class Main {


public static void main(String [] args) {
Personne personne = new Personne("el mouelhi","achref",34);
I c

[Link]();
ELH
U
MO
[Link](10);
[Link]();
}
f E L
}
c hre
c A
Le résultat sera
nom = el mouelhi, prenom = achref, majoriteSexuelle = majeur,
periode = adulte
nom = el mouelhi, prenom = achref, majoriteSexuelle = mineur,
periode = enfant

Avril 2018, H & H: Research and Training 14 / 15


Classe locale

Java

Remarques

I c

H
À la compilation deux fichiers, relatifs à la classe Personne, ont été
EL
générés (d’extension .class) U
L MO
Le premier : Personne
re f E
Le deuxième : c
A h
Personne$1Categorie ⇒ 1 étant l’indice de la
classe c (les classes locales seront numérotées dans l’ordre
locale
et la première aura l’indice 1)

Avril 2018, H & H: Research and Training 15 / 15

Vous aimerez peut-être aussi