Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3461 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] classe imbriquée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] classe imbriquée

n°714554
patastronc​h
Posté le 03-05-2004 à 18:54:25  profilanswer
 

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
mood
Publicité
Posté le 03-05-2004 à 18:54:25  profilanswer
 

n°714556
myst78
Posté le 03-05-2004 à 18:58:56  profilanswer
 

ben dans la classe C tu fais un truc genre  

Code :
  1. class B
  2. {
  3.     class C
  4.     {
  5.         A obj = new A();
  6.         ...
  7.     }
  8.     ...
  9. }


---------------
Fleur de métal, entité invulnérable, vêtue tant bien que mal, d'une muraille inébranlable...
n°714564
patastronc​h
Posté le 03-05-2004 à 19:08:44  profilanswer
 

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)

n°714579
nraynaud
lol
Posté le 03-05-2004 à 19:34:30  profilanswer
 

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).


---------------
trainoo.com, c'est fini
n°714591
patastronc​h
Posté le 03-05-2004 à 19:40:21  profilanswer
 

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 ?


Message édité par patastronch le 03-05-2004 à 19:40:42
n°714611
nraynaud
lol
Posté le 03-05-2004 à 19:50:38  profilanswer
 

non, il faut que tu crées l'instance dans l'instance directement englobante.


---------------
trainoo.com, c'est fini
n°714932
swgreedo
Posté le 04-05-2004 à 09:41:33  profilanswer
 

Code :
  1. merci!
  2. Bon ca marche  (petit probleme { , désolé de vous avoir embeté pour rien ...)
  3. Par contre dans l'autre sens ca marche comment ?
  4. 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 :
  5. C name=new C();
  6. 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 :
  1. class C implements MonInterface {
  2.    //définition des méthodes déclarées dans MonInterface
  3.    ....
  4. }


 - définir une factory (fabrique d'objets) dans ta classe B

Code :
  1. class B {
  2.    public MonInterface creerInstanceDeC() {
  3.        return new C();
  4.    }
  5. }


 - 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 :
  1. B instanceDeB = new B();
  2.    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...

n°715252
patastronc​h
Posté le 04-05-2004 à 14:18:16  profilanswer
 

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.

n°715273
patastronc​h
Posté le 04-05-2004 à 14:30:48  profilanswer
 

d ailleur si quelqu un pouvait me dire ce qu'aporte une classe imbriquée ... (ses avantages quoi ...) a part une certaine clarté.

n°715279
jagstang
Pa Capona ಠ_ಠ
Posté le 04-05-2004 à 14:33:30  profilanswer
 

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

mood
Publicité
Posté le 04-05-2004 à 14:33:30  profilanswer
 

n°715297
swgreedo
Posté le 04-05-2004 à 14:59:11  profilanswer
 

Code :
  1. la classe imbriqué est totalement invisible pour les autres classes. c'est une question d'abstraction et de visibilité sans doute. 
  2. Egalement utile pour une classe hyper spécialisée qui n'est pas réutilisable


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  :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] classe imbriquée

 

Sujets relatifs
[Java] Structure d'un programme[resolu][Java] Reproduir un assistant de saisi semi-automatique
griser la croix de la fenetre en java[Java] : Clic Droit sur un navigateur web
explication de bloc "static" en javaAcceder a une page avec un prog java sans passer par la page d'acces
[JAVA] Java et delegates[Java] Retrouver le code java a partir des .class ?
Explorateur ISO en java[JAVA/TOMCAT] Variables d'environnement
Plus de sujets relatifs à : [java] classe imbriquée


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)