Bonjour à tous, je commence le cours "débuter en java" et il y à un passage que je ne comprends vraiment pas:
jusqu'ici pas de souciSi 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() { } }
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: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.
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:
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();
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(); }
Partager