Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
PROGRAMMATION
ORIENTÉE OBJET
CLASSES INTERNES ET
ENUMÉRATIONS
1. CLASSES INTERNES
4
Classe interne
• Une classe est dite interne lorsque sa définition est située
à l’intérieur d’une autre classe.
Exemple 1
class E
{public void fe() // méthode de E
{ I i = new I(); //Création d’un objet de type I; Sa
//référence est locale à la méthode fe
}
class I
{….
}
…..
}
• Ici, une des méthodes d’un objet de type E utilise un objet de type I
8
Exemple 2
class E
{
private I i1, i2; // les champs i1 et i2 sont des
//références à des objets de type I
class I
{….
}
…..
}
9
Remarques:
• Une méthode statique d’une classe externe ne peut créer aucun objet
d’une classe interne.
• Une classe interne ne peut contenir de membres statiques
10
Exemple
class Cercle public void affiche ()
{ { System.out.print ("cercle de rayon "
private Centre c ; + r + " de centre ") ;
private double r ; c.affiche() ;
}
class Centre // definition public void deplace (int dx, int dy)
//interne à Cercle { c.x += dx ; c.y += dy ; // ici, on a
{ bien accès a x et y
private int x, y ; }
public Centre (int x, int y) }
{ this.x = x ;
this.y = y ; public class TestCercle
} { public static void main (String
public void affiche() args[])
{ System.out.println (x + ", " {
+ y) ; Cercle c1 = new Cercle(1, 3, 2.5);
} c1.affiche();
} //cercle de rayon 2.5 de centre 1, 3
public Cercle (int x, int y, double r) c1.deplace (4, -2) ;
{ c = new Centre (x, y) ; c1.affiche();
this.r = r ; // cercle de rayon 2.5 de centre 5, 1
} }
}
12
Masquage (shadowing)
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}
Classes locales
• On peut définir une classe interne I dans une méthode f d’une
classe E. Dans ce cas l’instanciation d’objets de type I ne peut
se faire que dans f. En plus des accès déjà décrits, un objet de
type I a alors accès aux variables finales de f.
}
……
}
17
Classes anonymes
• Les classes internes anonymes (anonymous inner-
classes) sont des classes internes qui ne possèdent pas
de nom. Elles ne peuvent donc être instanciées qu'à
l'endroit ou elles sont définies.
• Ce type de classes est très pratique dans la gestion des
événements ou lorsqu'une classe doit être utilisée une
seule fois
• La syntaxe de définition d’une classe anonyme ne
s’applique que dans deux cas:
• Classe anonyme dérivée d’une autre
• Classe anonyme implémentant une interface
18
Classes anonymes
Classe anonyme dérivée d’une autre classe
class A {
public void afficher() {
System.out.println("je suis un A ");
}
}
Classes anonymes
Classe anonyme implémentant une interface
interface Affichable {
public void afficher();
}
Enumérations: définition
• Une énumération (un type énuméré) est un type de
données spécial qui permet à une variable de prendre ses
valeurs dans ensemble fini.
• La variable doit être égale à l’une des valeurs prédéfinies
pour elle.
Enumérations: déclaration
• En java, une énumération est déclarée comme une classe
mais en utilisant le mot clé enum au lieu de class.
• Exemple:
Exemple:
Saison season= Saison.PRINTEMPS;
System.out.println("la Saison " + season.name() + " est à la position: " +
season.ordinal() ) ;
//affiche
la Saison PRINTEMPS est à la position: 1
26
System.out.println(Saison.PRINTEMPS.compareTo(Saison.HIVER)) ;
System.out.println(Saison.PRINTEMPS.compareTo(Saison.PRINTEMPS)) ;
System.out.println(Saison.PRINTEMPS.compareTo(Saison.ETE)) ;
//affiche
1
0
-1
28
• Exemple
public enum Couleur {VERT, BLEU, ROUGE}
……
Couleur color ;
……
if( color == Couleur.VERT) { }
else if( color == Couleur.BLEU) { }
else if( color == Couleur.ROUGE) { }
31
• Exemple
public enum Niveau { UN_CPI, DEUX_CPI,UN_CS, DEUX_CS,
TROIS_CS}
……
Niveau niv ;
……
switch (niv) {
case UN_CPI: ........... ; break;
case DEUX_CPI : ........... ; break;
case UN_CS : …………. ; break;
case DEUX_CS : ........... ; break;
case TROIS_CS : …….... ; break;
}
32
//affiche
HIVER
PRINTEMPS
ETE
AUTOMNE
33
• Il sert à associer une propriété qui prend une valeur particulière pour
chacune de ces instances.
Enumérations et héritage
• Seules les enum héritent de java.lang.Enum.
• Une classe ne peut hériter de Enum
• Une classe ne peut hériter d'une enumération
• Une énumération ne peut hériter d'une classe