Bonjour, à tous.
J'ai un petite question et je voudrais savoir sur un plan technique, quelle est la différence entre une classe anonyme, une classe interne. Et aussi quels sont les cas d'utilisation.
Merci
Bonjour, à tous.
J'ai un petite question et je voudrais savoir sur un plan technique, quelle est la différence entre une classe anonyme, une classe interne. Et aussi quels sont les cas d'utilisation.
Merci
Salut,
Il y a deux différences :Sinon pour tout le reste il n'y a aucune autre différence, puisque les classes anonymes sont des classes internes...
- les classes anonymes n'ont pas de nom
- les classes anonymes ne peuvent qu'hériter d'une classe ou implémenter UNE interface.
Quand à l'utilisation, on utilisera des classes internes lorsqu'on doit l'utiliser à plusieurs endroit de la classe, ou une classe anonymes si son rôle est restreint (par exemple pour la déclaration des listeners).
a++
Ca veut dire que tu peux récupérer la référence sur une classe anonyme ???Envoyé par adiGuba
Heu... OuiEnvoyé par thibaut
Tu peux manipuler une instance de classe anonymes comme n'importe quelle autre instance, si ce n'est que tu ne la manipules que selon le type qu'elle hérite/implémente :
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Runnable ref = new Runnable() { public void run() { // code ici } }; ref.run();
Oui, bien sûr :Envoyé par thibaut
La seule petite différence entre les classes internes et les classes anonymes est qu'on utilise ces dernières lorsqu'on ne veut instancier une classe interne qu'une seule fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Object obj = new Interface() { [...] };
Mais en fait, il n'y a pas de vraiment différence. Ainsi, ceci :
est équivalent à ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private class Exemple { [...] }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private Exemple getExemple() { return new Exemple() { [...] }; }
Autre petite difference, tu peux declarer une classe interne static ce qui n'est pas possible avec une anonyme.
Si tu declares une classe interne static, elle ne depend plus d'une instance particuliere mais se comporte comme une classe classique. tu ne peux plus acceder par exemple aux membres prives de la classe contenant la declaration.
Bulbo
Alors quel est l'intérêt de déclarer une classe interne statique plutôt qu'une classe externe ??Envoyé par bulbo
La mystere, je mentionne juste le fait que c'est possibleEnvoyé par thibaut
Blague a part, certains utilise ca pour definir la facory associe a une interface.
Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public interface Toto { ... public static class Factory { public static createNewTotoInstance() { ... } }
C'est relativement elegant ca te permet de faire Toto.Factory.createNewTotoInstance() et ca t'evite de chercher partout la factory.
Bulbo
La classe peut être déclaré en private, ce qui limite encore plus son scope (elle ne peut être utilisé que depuis la classe parente ou une de ses autres classes internes).Envoyé par thibautEn fait ce n'est pas tout à fait vrai : tu peux toujours accéder aux membres privates (attributs et méthodes) de la classe parente. Toutefois, tu ne peux pas le faire sur l'instance de la classe parente puisqu'il n'y a plus aucune association entre les deux...Envoyé par thibaut
Par contre tu peux très bien le faire sur une instance passé en paramètre par exemple.
De plus une classe interne static peut être utilisé afin de montrer un lien particulier entre les deux classes au niveau de la conception...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class MaClasse { /** Attributs */ private String value; /** Classe interne */ private static class ValueComparator implements Comparator<MaClasse> { public int compare(MaClasse o1, MaClasse o2) { return o1.value.compareToIgnoreCase(o2.value); } } }
a++
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