Salut, je ne sais pas exactement quel l’utilité de utiliser une classe Interne ?
Et même une classe Anonyme?
merci.
Salut, je ne sais pas exactement quel l’utilité de utiliser une classe Interne ?
Et même une classe Anonyme?
merci.
Salut,
Une classe interne (ou classe privée) te permet, dans le cas d'une interface graphique, de définir les réactions de tes évènements différemment pour chaque action.
Exemple : Deux boutons bouton1 et bouton2.
Tu veux bien évidemment définir 2 actions différentes pour ces deux boutons.
Tu ne peux donc pas pour les deux faire addActionListener(this) et implémenter ActionListener sur ta classe principalea lors tu crées 2 classes privées qui implémentent ActionListener et redéfinissent actionPerformed ce qui te permet de définir deux comportements différents pour ces deux boutons. Ce n'est qu'un exemple d'utilisation d'une classe privée, il doit y en avoir d'autres.
Pour ce qui est de la classe anonyme, elle te permet de définir une instance d'une classe sans pour autant la référencer. Il est possible dans une classe anonyme de redéfinir des méthodes. Exemple pour un Thread :
Ici je redéfinis la fonction run() de Runnable et cela crée une nouvelle instance d'un Thread qui s'exécute suite à l'appel de start(). Tout ceci évite de créer une classe qui étendrait Thread juste pour créer un Thread ponctuel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 new Thread ( new Runnable() { public void run() { //blabla } } ).start();
Les classes anonymes peuvent être utilisé pour les évènements et l'exemple d'au dessus mais on finit par avoir un code très brouillon et dur à maintenir.
Si quelqu'un sait expliquer clairement sans exemple, je suis preneur
F.
En fait pour les évenement j'utilise des classes anonymes comme quoi
Je fais ainsi:
C'est clair et facilement maintenable, le listener est crée à la création du bouton mais si je dois modifier le code associé je cherche direct la méthode doClickMe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 JButton but = new JButton("Click me"); but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { doClickMe(); } });
Une classe privé est utile surtout quand on veut créer plusieurs instance de la dite classe spécialisée (contrairement aux listeners ou on en utilise qu'un), et surtout dans l'éventualité ou cette classe n'a aucun intérêt à être exposée aux autres classes.
Par exemple si tu te définis un modèle de donnée interne à ta classe pour simplifier ton code mais que ce modèle est caché par l'implémentation et seulement utilisé en interne une classe privé est parfaite pour ça.
Bulbo![]()
Personnellement j'ai pris le reflexe d'utiliser des classes internes pour les évènements pour la réutilisation du code : on a souvent plusieurs boutons qui font la même chose
F.
Rien ne t'empêche de faire ainsi:
Si le code est le même pourquoi plusieurs instances ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ActionListener myButtonListener = new ActionListener() { public void actionPerformed(ActionEvent event) { doClickMe(); } }; JButton but1 = new JButton("Click me"); but1.addActionListener(myButtonListener); JButton but2 = new JButton("Click me too"); but2.addActionListener(myButtonListener);
Niveau réutilisation c'est mieux que ta solution, une seule implémentation doClickMe, une seule instance de listener myButtonListener, moins d'objet et une bonne visibilité du code du listener surtout si tu utilises un IDE.
Bulbo![]()
Coucou,
Je n'utilise pas d'IDE, je programme sous Emacs (on ne peut pas appeller ça un IDE java si ?)
Moi je fais ainsi :
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 monBouton.addActionListener(new ActionDeMonBouton(/*parametres utiles*/)); //... private class ActionDeMonBouton implements ActionListener { // attributs de classe ActionDeMonBouton(/*parametres utiles*/) { } public void actionPerformed(ActionEvent e) { // Le code avec les parametres utiles tout ca tout ca } }
l'avantage de cette méthode est que tu passes à ta classe privée ce que tu veux pour des traitements divers et variés dans le actionPerformed, alors que dans ta classe anonyme, tu ne peux manipuler les attributs de this si ils ne sont pas static... Si ?
F.
Salut,
Une classe anonyme est en fait une classe interne privé, et les deux permettent donc la même chose.
La seule différence vient du fait qu'on ne peut instancier une classe anonyme via son nom (puisqu'on ne le connait pas).
Après c'est surtout une question d'organisation...
Quels sont les différents types de classes internes (nested classes) ?
a++
Oui, je disais ca dans le sens où la classe privée permettait un passage de paramètre dans le constructeur
F.
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