classe imbriquée [java] - Java - Programmation
Marsh Posté le 03-05-2004 à 18:58:56
ben dans la classe C tu fais un truc genre
Code :
|
Marsh Posté le 03-05-2004 à 19:08:44
euh ... de la classe B ca marche mais de la classe C ca marche pas ... (y a peut etre un probleme dans mon programme alors je verifie)
Marsh Posté le 03-05-2004 à 19:34:30
attention, dans ce cas, on parle de classe interne (les instances sont emboitée, on peut accéder à l'instance englobante explicitement par ClasseEnglobante.this ou implicitement per le nom de son membre).
Les classe imbriquées sont celles déclarées "static" auquel cas, les espaces de nommage sont emboités, mais pas les instances (il n'existe donc pas d'instance englobante).
Marsh Posté le 03-05-2004 à 19:40:21
merci!
Bon ca marche (petit probleme { , désolé de vous avoir embeté pour rien ...)
Par contre dans l'autre sens ca marche comment ?
c a d a partir de la classe A creer un objet C ?? A part si j'ai encore fait une gourde dans mon programme ca marche pas quand je fait :
C name=new C();
C'est parceque je suis nul ou on ne peux pas acceder aux classes imbriqués a partir d'une classe exterieur ?
Marsh Posté le 03-05-2004 à 19:50:38
non, il faut que tu crées l'instance dans l'instance directement englobante.
Marsh Posté le 04-05-2004 à 09:41:33
Code :
|
Effectivement une classe interne n'est pas accessible en dehors de la classe qui l'englobe. Logique, elle est interne
Si tu veux tout de meme pouvoir instancier ta classe C depuis ta classe A (mais dans ce cas, quel est l'intérêt de faire une classe interne ???), tu peux faire la chose suivante :
- créer une Interface définissant le squelette de ta classe C ; attention, elle ne devra pas etre interne (d'ailleurs je ne sais pas si il est possible de faire une interface interne comme on fait une classe interne)
- rajouter "implements MonInterface" à l'entete de ta classe C qui devient donc :
Code :
|
- définir une factory (fabrique d'objets) dans ta classe B
Code :
|
- et enfin appeler cette méthode depuis ta classe A ; forcément, du point de vue de ta classe A, tu ne récupères pas une instance de C (qui n'est pas connue) mais un objet implémentant ton interface.
Code :
|
Je n'ai pas testé mais ca devrait fonctionner... Sachant que (je me répète), créer une classe interne pour l'utiliser en dehors de la classe englobante, ca ne sert pas a grand chose...
Marsh Posté le 04-05-2004 à 14:18:16
Oui je suis d accord avec toi que ca ne sert a rien c etait par curiosité surtout. Comme je le disais je debute et je test les posibilités du langages.
en tout cas merci pour ta reponse je vais tester voir si ca marche mais a priori ca devrait marcher.
Marsh Posté le 04-05-2004 à 14:30:48
d ailleur si quelqu un pouvait me dire ce qu'aporte une classe imbriquée ... (ses avantages quoi ...) a part une certaine clarté.
Marsh Posté le 04-05-2004 à 14:33:30
patastronch a écrit : d ailleur si quelqu un pouvait me dire ce qu'aporte une classe imbriquée ... (ses avantages quoi ...) a part une certaine clarté. |
la classe imbriqué est totalement invisible pour les autres classes. c'est une question d'abstraction et de visibilité sans doute.
Egalement utile pour une classe hyper spécialisée qui n'est pas réutilisable
Marsh Posté le 04-05-2004 à 14:59:11
Code :
|
Par exemple, il m'est arrivé d'en utiliser une pour un comparateur : si ma mémoire est bonne, pour utiliser la méthode de comparaison du type Array (ou List, je ne me souviens plus bien), il faut fournir un comparateur adapté au contenu de ton tableau (par exemple si tu as un tableau d'objets personnes, ton Comparator doit définir comment comparer tes personnes entre elles). En général tu ne te sers de ce genre de classe qu'une fois dans ton code, tu peux donc être content de la cacher. Bref, tu définis ton Comparator en classe interne juste avant de l'utiliser. En plus ca évite d'avoir à créer un fichier supplémentaire
Marsh Posté le 03-05-2004 à 18:54:25
bon je suis un gros gros debutant en java alords vous moquez pas moi hein !!!
voila mon probleme :
class A {
...
}
class B {
...
class C {
...
}
...
}
en fait est il possible a partir de la class C de construire un objet A ?? et si oui comment ???
merci d'avancepour vos reponse !!
Message édité par patastronch le 03-05-2004 à 18:55:13