« Programmation Java/Classes internes » : différence entre les versions

Contenu supprimé Contenu ajouté
WikiBayer (discussion | contributions)
m Révocation des modifications de 194.153.88.133 (discussion) vers la dernière version de JackPotte
Balises : Révocation SWViewer [1.3]
Aucun résumé des modifications
Ligne 7 :
 
Une classe interne statique ne peut accéder qu'aux membres statiques de sa classe contenante, représentée par ''ClassExterne'' dans l'exemple suivant :
<sourcesyntaxhighlight lang="java">
public class ClasseExterne
{
private int compteur = 0;
private static String nom = "Exemple";
 
static class ClasseInterne
{
{
private int index = 0;
public ClasseInterne()
{
{
System.out.println("Création d'un objet dans "+nom);
// compteur ne peut être accedé
}
}
}
}
}
</syntaxhighlight>
</source>
La compilation du fichier <code>ClasseExterne.java</code> produit deux fichiers compilés :
* <code>ClasseExterne.class</code> contient la classe <code>ClasseExterne</code> uniquement
Ligne 34 :
 
Exemple (Classe non statique globale) :
<sourcesyntaxhighlight lang="java">
public class ClasseExterne
{
private int compteur = 0;
 
class ClasseInterne
{
{
private int index = 0;
public ClasseInterne()
{
{
compteur++;
}
}
}
}
}
</syntaxhighlight>
</source>
Depuis la classe interne, dans le cas où plusieurs variables ou méthodes portent le même nom dans la classe interne et la classe externe, le pointeur <code>this</code> seul désigne l'instance de la classe interne, tandis que le pointeur <code>this</code> précédé du nom de la classe externe désigne l'instance de la classe externe.
<sourcesyntaxhighlight lang="java">
public class ClasseExterne
{
private int compteur = 10;
 
class ClasseInterne
{
{
private int compteur = 0;
public void count()
{
{
this.compteur++; // -> 1
ClasseExterne.this.compteur--; // -> 9
}
}
}
}
}
</syntaxhighlight>
</source>
 
== Classe anonyme ==
 
Une classe peut être déclarée au moment de l'instanciation de sa classe parente.
On parle alors de classe anonyme.
Exemple :
<sourcesyntaxhighlight lang="java">
public class ClasseExterne
{
Bissextile b = new Bissextile() {
{
public boolean evaluer(annee) {
if ((annee%4==0 && annee%100!=0) || annee%400==0) {
{
return true;
if ((annee%4==0 && annee%100!=0) || annee%400==0) {
} else {
return falsetrue;
else
}
return false;
}
}
};
};
public static void main(String args[]) {
long an = Long.parseLong(args[0]);
{
if (b.evaluer(an)) {
long an = Long.parseLong(args[0]);
System.out.println("L'année entrée est bissextile");
if (b.evaluer(an)) {
} else {
System.out.println("L'année entrée n'est pas bissextile");
else
}
System.out.println("L'année entrée n'est pas bissextile");
}
}
}
</syntaxhighlight>
</source>
La classe Bissextile est ici la classe mère d'une classe anonyme. Cette classe sera automatiquement nommée par le compilateur <code>ClasseExterne$1</code>. Il convient d'observer le point-virgule qui suit l'accolade fermante de sa déclaration.