Jacques Bapst
jacques.bapst@hefr.ch
Informatique / Programmation
Programmation orientée objet avec Java
14 : Classes internes
PR1_14
Java /
EIA-FR / Jacques Bapst 2
Classes internes
Jusqu'à présent, les classes (et interfaces) que nous avons vues
étaient toutes des classes (et interfaces) de premier niveau (c'est-
à-dire des membres directs des paquetages, sans imbrication).
Le langage Java permet cependant de définir des classes à
l'intérieur d'autres classes.
On parle dans ce cas de classes internes (Nested Class).
Il existe quatre types de classes internes :
Les classes membres statiques (Static Nested Class)
Les classes membres (Inner Class)
Les classes locales (Local Inner Class)
Les classes anonymes (Anonymous Inner Class)
Java / Classes internes
Attention : D'un auteur à l'autre, le vocabulaire utilisé pour qualifier ces
différentes classes internes peut varier sensiblement.
PR1_14
Java /
EIA-FR / Jacques Bapst 3
Classes membres statiques [1]
Une classe membre statique est une classe définie comme un
membre statique d'une autre classe.
Des interfaces peuvent également être déclarées comme
membres statiques d'une classe. Les remarques qui suivent
s'appliquent donc également aux interfaces membres statiques.
Par analogie avec les méthodes statiques, on pourrait parler de
"classe de classe" (mais cela porte un peu à confusion).
Une classe membre statique se comporte comme une classe de
premier niveau avec en outre la possibilité d'accéder aux membres
statiques de la classe qui la contient (classe englobante).
Une classe membre statique a accès à tous les membres statiques
de sa classe englobante, y compris les membres privés (private).
L'inverse est également vrai : les méthodes de la classe englobante
ont accès à tous les membres (statiques ou non-statiques) d'une
classe membre statique, y compris les membres privés.
Java / Classes internes
PR1_14
Java /
EIA-FR / Jacques Bapst 4
Classes membres statiques [2]
Une classe membre statique a même accès à tous les membres
des autres classes membres statiques (classes "sœurs"), y compris
aux membres déclarés private de ces classes.
Une classe membre statique peut être déclarée avec ses propres
modificateurs de contrôle d'accès. Ces modificateurs (public,
protected, private, aucun) possèdent les mêmes significations que
pour les autres membres d'une classe (champs et méthodes).
En dehors de la classe englobante, une classe membre statique
est nommée en combinant le nom de la classe externe avec le
nom de la classe interne. Par exemple :
LinkedStack.Linkable node
Restrictions :
Une classe membre statique ne peut pas posséder le même nom
qu'une de ses classes englobantes.
Une classe membre statique ne peut être englobée que dans une
classe de premier niveau ou dans une classe membre statique.
Java / Classes internes
PR1_14
Java /
EIA-FR / Jacques Bapst 5
Exemple d'interface membre statique
//===== Une classe qui implémente une pile sous forme de liste chaînée =====
public class LinkedStack {
// Interface membre statique qui définit la manière dont les objets sont liés
public static interface Linkable {
public Linkable getNext();
public void setNext(Linkable node);
}
// La tête de liste est un objet de type Linkable
Linkable head;
// Les corps des méthodes sont omis
public void push(Linkable node) { ... }
public Linkable pop() { ... }
}
Java / Classes internes
//===== Cette classe implémente l'interface membre statique =====
public class LinkableInteger implements LinkedStack.Linkable {
// Les données et le constructeur du noeud
int i;
public LinkableInteger(int i) { this.i = i; }
// Données et méthodes requises pour implémenter l'interface
LinkedStack.Linkable next;
public LinkedStack.Linkable getNext() { return next; }
public void setNext(LinkedStack.Linkable node) { next = node; }
}
1 / 18 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !