IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Info]Classe anonyme - interne


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut [Info]Classe anonyme - interne
    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

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a deux différences :
    • les classes anonymes n'ont pas de nom
    • les classes anonymes ne peuvent qu'hériter d'une classe ou implémenter UNE interface.
    Sinon pour tout le reste il n'y a aucune autre différence, puisque les classes anonymes sont des classes internes...

    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++

  3. #3
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par adiGuba
    Sinon pour tout le reste il n'y a aucune autre différence, puisque les classes anonymes sont des classes internes...
    Ca veut dire que tu peux récupérer la référence sur une classe anonyme ???

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thibaut
    Ca veut dire que tu peux récupérer la référence sur une classe anonyme ???
    Heu... Oui
    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 :
    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();
    a++

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par thibaut
    Ca veut dire que tu peux récupérer la référence sur une classe anonyme ???
    Oui, bien sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Object obj = new Interface() {
         [...]
    };
    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.

    Mais en fait, il n'y a pas de vraiment différence. Ainsi, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private class Exemple {
         [...]
    }
    est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private Exemple getExemple() {
         return new Exemple() {
              [...]
         };
    }

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    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
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par bulbo
    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 ??

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Citation Envoyé par thibaut
    Alors quel est l'intérêt de déclarer une classe interne statique plutôt qu'une classe externe ??
    La mystere, je mentionne juste le fait que c'est possible

    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
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thibaut
    Alors quel est l'intérêt de déclarer une classe interne statique plutôt qu'une classe externe ??
    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).
    Citation Envoyé par thibaut
    tu ne peux plus acceder par exemple aux membres prives de la classe contenant la declaration.
    En 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...

    Par contre tu peux très bien le faire sur une instance passé en paramètre par exemple.
    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);
            }
        }
    }
    De plus une classe interne static peut être utilisé afin de montrer un lien particulier entre les deux classes au niveau de la conception...


    a++

Discussions similaires

  1. Classe anonyme et classe interne
    Par amazircool dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2007, 14h45
  2. [Info] Class File Editor
    Par maminova77 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/03/2006, 16h52
  3. [Info]Classes externe
    Par mrttlemonde dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/11/2005, 19h11
  4. Réponses: 5
    Dernier message: 16/08/2005, 10h30
  5. [classe anonyme] implementant une interface
    Par stanilas dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2004, 00h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo