Code :
- 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 ?
|
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 :
- class C implements MonInterface {
- //définition des méthodes déclarées dans MonInterface
- ....
- }
|
- définir une factory (fabrique d'objets) dans ta classe B
Code :
- class B {
- public MonInterface creerInstanceDeC() {
- return new C();
- }
- }
|
- 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 :
- B instanceDeB = new B();
- MonInterface instanceDeC = instanceDeB.creerInstanceDeC();
|
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...