|
Notes sur les classes imbriquees
Qu'est qu'une classe imbriquee ?
|
Concretement une classe imbriquee est une classe qui repond aux deux criteres
suivants:
- elle est definie a l'interieur d'une classe.
- elle derive d'une interface.
Fichier test.java |
public class test
{
public static void main (String[] atgv)
{
Classe_Superieure cs = new Classe_Superieure(10);
cs.ci.Affiche();
cs.Info();
cs.ci.SetVal(100);
cs.ci.GetVal();
System.out.println(" ");
Classe_Superieure cs_ = new Classe_Superieure(10);
cs_.ci.Affiche();
cs_.Info();
cs_.ci.SetVal(200);
cs_.ci.GetVal();
System.out.println(" ");
cs_.ci.SetVal(300);
cs.ci.GetVal();
}
}
interface Interface
{
final static int constante = 10;
abstract void Affiche();
}
class Classe_Superieure
{
int val;
Classe_Interne ci;
class Classe_Interne implements Interface
{
int val;
Classe_Interne()
{
System.out.println("Creation d'une instance de \"Classe_Interne\"");
}
public void Affiche()
{
System.out.println("Appel de la methode Affiche() de la classe Interne - "+ val);
}
void SetVal(int v) { val = v; }
void GetVal() { System.out.println("--> val = "+ val); }
}
Classe_Superieure(final int v)
{
System.out.println("Creation d'une instance de \"Classe_Superieure\"");
val = v;
ci = new Classe_Interne();
}
void Info()
{
System.out.println("valeur: " + val);
ci.Affiche();
}
}
|
A l'execution, on obtient l'affichage suivant:
C:\programmes\java>java test
Creation d'une instance de "Classe_Superieure"
Creation d'une instance de "Classe_Interne"
Appel de la methode Affiche() de la classe Interne - 0
valeur: 10
Appel de la methode Affiche() de la classe Interne - 0
--> val = 100
Creation d'une instance de "Classe_Superieure"
Creation d'une instance de "Classe_Interne"
Appel de la methode Affiche() de la classe Interne - 0
valeur: 10
Appel de la methode Affiche() de la classe Interne - 0
--> val = 200
--> val = 100
|
Note
La compilation du fichier test.java produit les 4 classes suivantes:
- test.class
- Interface.class
- Classe_Superieure.class
- Classe_Superieure$Classe_Interne.class
Remarquer le caractere "$" dans "Classe_Superieure$Classe_Interne.classe".
|
La compilation du programme ci dessous produit 5 classes:
- Interface.class
- Classe_Superieure.class
- Classe_Superieure$Classe_Interne.class
- Classe_Superieure$Classe_Interne$Interne.class
Fichier test.java |
public class test
{
public static void main (String[] atgv)
{
Classe_Superieure cs = new Classe_Superieure(10);
cs.ci.Affiche();
cs.Info();
cs.ci.SetVal(100);
cs.ci.GetVal();
}
}
interface Interface
{
final static int constante = 10;
abstract void Affiche();
}
class Classe_Superieure
{
int val;
Classe_Interne ci;
class Classe_Interne implements Interface
{
int val;
Classe_Interne()
{
System.out.println("Creation d'une instance de \"Classe_Interne\"");
}
public void Affiche()
{
System.out.println("Appel de la methode Affiche() de la classe Interne - "+ val);
}
void SetVal(int v) { val = v; }
void GetVal() { System.out.println("--> val = "+ val); }
class Interne implements Interface
{
public void Affiche()
{
System.out.println("Appel de la methode Affiche() de la classe Interne de second niveau");
}
}
}
Classe_Superieure(final int v)
{
System.out.println("Creation d'une instance de \"Classe_Superieure\"");
val = v;
ci = new Classe_Interne();
}
void Info()
{
System.out.println("valeur: " + val);
ci.Affiche();
}
}
|
|