[JAVA] Nested classes

Résolu
Mardu -  
 Mardu -
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   Statut Membre Dernière intervention   11
 
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
Mardu
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
Mardu
 
Merci bien :)
0