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 :

hiérarchie de contrôle


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 95
    Par défaut hiérarchie de contrôle
    Bonjour à tous, je commence le cours "débuter en java" et il y à un passage que je ne comprends vraiment pas:

    Si vous déclarez une classe comme private, ses éléments ne peuvent être que package-private ou private :

    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
    class PrivateClass {
     
        int internalProperty = 0; // assigne automatiquement package-private par défaut
     
        protected defaultProperty = true; // assigne automatiquement package-private 
     
        public boolean publicProperty = true; // convertit automatiquement en package-private 
     
        private String fileprivateProperty = "Hello!"; //disponible seulement pour la classe
     
        private static void privateMethod() {
     
        }
     
    }
    jusqu'ici pas de souci

    Dans l'exemple ci-dessus, nous avons ajouté un attribut sans mot clé de contrôle d'accès explicite. Dans ce scénario, il assume par défaut le niveau de l'élément contenant. Dans ce cas, c'est notre classe, donc il assume le niveau de PrivateClass.

    Une classe de premier niveau ne peut pas être marquée comme private, mais la définir comme « par défaut » la placera dans le niveau package-protected. Lors de la déclaration d'une variable d'une classe, si le niveau de contrôle du contexte de déclaration est supérieur à celui de la classe, la variable doit également avoir un niveau de contrôle explicite. Déclarons une variable PrivateClass :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PrivateClass a = new PrivateClass(); // Erreur
     
    private PrivateClass b = new PrivateClass(); // Ok
     
    private PrivateClass c = new PrivateClass(); // Ok

    Comme vous pouvez le voir, si le niveau d'accès par défaut du contexte d'une variable est supérieur à une classe que vous lui affectez, vous devez explicitement spécifier le niveau de la variable comme étant le même ou inférieur à celui de la classe.
    alors je sais pas si c'est effectivement pas clair ou si c'est moi qui suis c** mais je comprends pas du tout ce qu'il veut dire:
    si je crée une classe de premier niveau appelée PrivateClass (mais dont le niveau de controle n'est pas spécifié et donc qui n'est pas private)

    le cours parle de déclarer une variable de cette classe dans un contexte ayant un plus haut niveau de contrôle, mais si PrivateClass est de premier niveau comment est-ce que je peux déclarer une variable de cette classe dans un contexte ayant un plus haut niveau de contrôle (donc private)??

    j'ai essayé quelque chose comme ça:

    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
    17
    package test;
     
    class PrivateClass {
        int internalProperty = 0; 
        protected boolean defaultProperty = true;
        public boolean publicProperty = true;
        private String fileprivateProperty = 
        private static void privateMethod() {
        }
    }
    private class TrulyPrivateClass{ // c'est ce que je comprends par "contexte ayant un plus haut niveau de contrôle" mais impossible de mettre cette classe en private
        PrivateClass a = new PrivateClass(); // d'après le cours il devrait y avoir une erreur mais le compilateur ne voit rien qui cloche.
        private PrivateClass b = new PrivateClass(); 
        private PrivateClass c = new PrivateClass();
     
     
    }
    le seul autre moyen que je voie pour declarer une variable de cette classe dans un contexte de plus haut niveau de contrôle c'est de le faire dans un autre fichier dans le même package et le compilateur ne trouve toujours aucune erreur à la ligne PrivateClass a = new PrivateClass();

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    grosso-modo ça raconte n'importe quoi, ce qui est dit là.

    - Non, il n'y a pas de "conversion" des niveaux de contrôle. Ce qui est public reste public, ce qui est protected reste protected, etc. A la rigueur, dans une interface comme il n'y a pas de package-private, si on met rien c'est public. Et autres subtilités du langage de ce genre.

    - Non, le contenu d'une classe n'est pas tenu d'avoir un niveau d'accès égal ou inférieur à la classe, le niveau d'accès reste libre. C'est vrai qu'a priori ça ne sert à rien, un truc public dans une classe private, puisque le reste du programme ne peut pas accéder à la classe private, alors son contenu, hein... Mais il y a des cas plus subtils : et notamment c'est nécessaire pour le polymorphisme.

    Tout n'est pas faux. Par exemple, si on ne précise pas le niveau de contrôle, c'est normalement un niveau de contrôle en soi, package-private. Autre exemple, une classe de premier niveau ne peut effectivement pas être private (ni protected d'ailleurs).

    J'ajoute que j'ai jeté quelques coups d’œils à ce cours, et le nombre de trucs faux sur des points pourtant cruciaux de ce que ça essaie d'apprendre, est hallucinant.

    Je ne suis pas relecteur de nos propres cours et je ne sais pas si on fait mieux ni si se planter à ce point est un genre de standard, mais je trouve ça inquiétant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 95
    Par défaut
    merci bien ça me rassure un peu sur la quantité de neurones qu'il me reste

    pour ce qui est du cours ça me confirme qu'il vaut mieux que j'en cherche un autre

Discussions similaires

  1. Gestion du focus dans une hiérarchie de contrôles
    Par JolyLoic dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 29/08/2009, 15h44
  2. Codes de contrôle des imprimantes
    Par hetzel dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 21/03/2003, 17h17
  3. [ActiveX] Propriété "Picture" dans un contrôle util
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/12/2002, 15h59
  4. [contrôle] dbDateTimePicker ???
    Par Fizgig dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/11/2002, 15h45
  5. [Kylix] Contrôle DBGrid
    Par KThrax dans le forum EDI
    Réponses: 1
    Dernier message: 10/05/2002, 14h18

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