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

avec Java Discussion :

Les énumérations, étrange


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 75
    Points
    75
    Par défaut Les énumérations, étrange
    Bonjour,

    Je me pose quelques questions concernant les énumérations,

    Quand une enum (UNE_ENUM) est déclarée à l'extérieur d'une classe.
    On peut y accèder comme s'il s'agissait d'une classe statique, pour autant après test, on ne peut pas déclarer une enum "static". étrange ? Vous auriez une explication ?

    De même, il semble qu'il ne soit pas possible de déclarer une enum protected ou private à l'intérieur ou à l’extérieur d'une classe. De fait elle est nécessairement public et donc accessible par tous ? Quel est la différence entre une enum déclarée à l’intérieur ou à l’extérieur d'une classe ?

    Merci d'avance pour vos lumières.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par pigpen Voir le message
    Quand une enum (UNE_ENUM) est déclarée à l'extérieur d'une classe.
    On peut y accèder comme s'il s'agissait d'une classe statique, pour autant après test, on ne peut pas déclarer une enum "static". étrange ? Vous auriez une explication ?
    Comme les interfaces, un enum est forcément statique, par nature.
    Java a donc décidé que c'était implicite et qu'il n'y avait pas besoin de le préciser à chaque fois.
    Un enum est statique. C'est tout.

    Citation Envoyé par pigpen Voir le message
    De même, il semble qu'il ne soit pas possible de déclarer une enum protected ou private à l'intérieur ou à l’extérieur d'une classe.
    ??
    - À l'extérieur d'une classe, c'est normal : les classes et les interfaces non plus ne peuvent pas y être déclarées protected ou private. Ça n'aurait pas de sens. Eh ben, ça n'a pas plus de sens avec les enum, qui ne sont que des classes spéciales.
    - À l'intérieur d'une classe, si, on peut. Je vois pas ce qui t'a fait croire le contraire.

    Citation Envoyé par pigpen Voir le message
    De fait elle est nécessairement public et donc accessible par tous ?
    Non.
    - Les enum, les classes et les interfaces, déclarés à l'extérieur d'une classe, peuvent être public ou package-private : ce qu'on obtient quand on ne précise pas public. Ça veut dire que ce n'est visible que par les classes qui sont dans le même package. C'est une visibilité entre public private et protected, car protected est aussi visible par les classes de même package.

    - Les enum internes peuvent être déclarés protected ou private.

    Citation Envoyé par pigpen Voir le message
    Quel est la différence entre une enum déclarée à l’intérieur ou à l’extérieur d'une classe ?
    La même qu'une classe statique ou une interface déclarée à l'intérieur ou à l'extérieur d'une classe.
    Ça veut dire que, s'il n'est pas privé, son nom est dans l'espace de nom de la classe qui le contient.
    S'il est privé, ça veut juste dire que seule la classe qui le contient peut le voir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Euh, juste une petite demande d'éclaircissement, je n'ai pas vraiment saisis la différence (en gras) :
    Citation Envoyé par thelvin Voir le message
    - Les enum, les classes et les interfaces, déclarés à l'extérieur d'une classe, peuvent être public ou package-private : ce qu'on obtient quand on ne précise pas public. Ça veut dire que ce n'est visible que par les classes qui sont dans le même package. C'est une visibilité entre public et protected, car protected est aussi visible par les classes de même package.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  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
    Salut,


    La visibilité "package" n'est pas une visibilité entre public et protected, mais plutôt entre protected et private :

    • public : visible par tous le monde.
    • protected : visible par les classes filles ET les classes du même package.
    • <package> : visible par les classes du même package.
    • private : visible seulement dans la classe courante.



    @pigpen : le mot-clef static sur une classe (ou enum ou interface) indique seulement que la classe n'est pas lié à son parent. Pour une enum ou une interface c'est implicite car cela n'a aucun sens.



    a++

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    La visibilité "package" n'est pas une visibilité entre public et protected, mais plutôt entre protected et private :
    Oui, c'est ce que je voulais dire, merci.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. JDK 7: Proposition 3 : Comparer les énumérations
    Par vbrabant dans le forum Langage
    Réponses: 52
    Dernier message: 19/10/2008, 12h36
  2. Les énumérations string ?
    Par DranDane dans le forum C#
    Réponses: 4
    Dernier message: 21/08/2008, 11h16
  3. [Détente] Les API étranges: ces classes au comportement curieux.
    Par grunt2000 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/11/2007, 14h31
  4. Résultat étrange avec les lumières.
    Par MaxPayne dans le forum OpenGL
    Réponses: 4
    Dernier message: 12/04/2005, 18h04
  5. [Java 5] Réflexion sur les énumérations type-safe
    Par rozwel dans le forum Langage
    Réponses: 5
    Dernier message: 04/12/2004, 20h34

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