Bonjour ,
je souhaiterais savoir à quoi peut servir une classe interne en java et sa relation avec : l'association , agrégation composition , héritage ?
une classe interne c'est une classe décrite dans une classe décrite ....
Merci
Bonjour ,
je souhaiterais savoir à quoi peut servir une classe interne en java et sa relation avec : l'association , agrégation composition , héritage ?
une classe interne c'est une classe décrite dans une classe décrite ....
Merci
Salut,
Une classe interne est juste une classe, comme n'importe quelle autre, mais dont le besoin n'est que nécessaire à l'intérieur de la classe : elle n'aurait aucune utilité, voire aucun sens à pouvoir être utilisée dans une autre classe. Elle a en pratique l'avantage d'avoir accès aux variables de la classe englobante, ce qui simplifie le couplage.
Il faut tout de même distinguer les classes internes publiques des autres : on les utilise parfois juste pour faire comprendre qu'elles sont liées à l'usage de la classe englobante. Cela peut avoir un sens avec les interfaces : voir l'exemple de Map.Entry. Personnellement, je préfère éviter les classes (les Interface je les utilise), mais je peux les utiliser quand je fais des snippets (exemple, poc, etc.), ce qui me permet d'avoir qu'un seul fichier .java que je peux transmettre, comme par exemple, quand je publie des exemples sur le forum.
Il faut également parler du fait qu'il y a des classes internes dites locales (à une méthode, voire un bloc), anonymes ou pas. Celles-là sont utilisées pour des besoins très ponctuels, à un endroit unique (comme par exemple un MouseListener très simple).
Il n'y a donc pas de lien particulier avec le modèle de données (composition, agrégation, héritage, ou autre, etc...).
Peut on faire comme ceci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Class A { attribut a1; attribut a2; ...... Class B { ...... Class C { ..... } } } main()... { Class C c= new C(... ); c.attribut a1= ...; }
Merci
Non, on ne peut pas instancier C en dehors de B, parce que la classe C n'existe que dans le scope d'une instance de la classe B, qui elle-même n'existe que dans le scope de l'instance d'une classe A. Si elle est interne à la classe, c'est justement qu'on ne devrait pas l'utiliser en dehors (Même s'il peut y avoir des moyens de le faire, sous certaines conditions). Si la classe doit être utilisée en dehors, elle ne devrait pas être interne.
En plus, l'attribut appartient à la classe A : il est visible dans la classe C, donc peut être lu, ou modifié dans cette classe, mais n'appartient pas à C, donc on ne peut écrire c.a1, avec c de classe C.
NB : en Java, une classe se décrit par class XYZ : pas de majuscule à class (comme pour tous les mots clefs Java). Et on écrit X x = new X() pas X x = new class X(). Idem pour l'accès à l'attribut (x.a1), si tant est qu'il soit accessible.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager