[JAVA] Nested classes

Résolu/Fermé
Mardu - Modifié par Mardu le 30/08/2011 à 05:10
 Mardu - 31 août 2011 à 18:12
Salut,
j'aimerais avoir une petite explication sur un point des nested classes, après avoir cherché un peu sur le net je suis tombé sur un cour qui disait ceci à propos de la visibilité des membres :
Visibilité pour les classes internes static : 
- La classe englobante a accès à tous les membres de la classes internes, qu'ils soient static ou non, et même s'ils sont private

or d'apres ce que j'ai compris la classe englobante ne devrait avoir accès qu'aux membres static de la classe interne non ? Et après avoir testé mon compilateur semble être du même avis que moi.
J'aimerais donc savoir si c'est une erreur de l'auteur ou si c'est moi qui ai mal compris le principe ?

Merci d'avance :)
A voir également:

3 réponses

poukkid Messages postés 106 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 11 avril 2012 11
30 août 2011 à 10:58
Salut,

C'est plutot l'inverse, les classes internes sont en général utilisées pour pouvoir avoir accès à tous les attributs de la classe englobante, même s'ils sont privates.

Vas voir la dessus cette notion est bien expliquée :

https://java.developpez.com/faq/java?page=Concepts-du-langage#NOTION_classe_interne_types
0
Merci pour ta réponse.
Pour le moment c'est encore un peu brouillon dans mon esprit, j'ai déjà vu quelques exemple d'utilisation des classes internes mais j'ai encore un peu de mal à imaginer tous les cas ou elles peuvent être utiles.
Donc pour en revenir a ma question de base, je ne devrais jamais rencontrer de situation on ma classe englobante devrait avoir accès a un membre de la classe interne ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
30 août 2011 à 21:39
Si, tu peux accéder aux membres de la classe interne, mais uniquement au travers d'un objet de cette classe. Voici un exemple de ce qu'on peut faire ou non :

public class A
{  
    private int x;
	
    class B
    {
    	private int y;
    	
    	void f()
    	{
    		x=1; // possible
    		y=2; // possible
    	}
    }
    
    void g()
    {
    	x=3; // possible
    	y=4; // impossible
    	
    	B b = new B();
    	b.x=5; // impossible
    	b.y=6; // possible
    }
}

Les classes que j'ai pu croiser de ce type sont des implémentations d'interface, par exemple pour implémenter Iterator dans les Collection, ou les ActionListener en Swing.
0
Merci bien :)
0