Question

Ce code provient d'un test de pratique SCJP:

 3. public class Bridge { 
 4.   public enum Suits { 
 5.     CLUBS(20), DIAMONDS(20), HEARTS(30), SPADES(30), 
 6.     NOTRUMP(40) { public int getValue(int bid) { 
                        return ((bid-1)*30)+40; } }; 
 7.     Suits(int points) {  this.points = points;  } 
 8.     private int points; 
 9.     public int getValue(int bid) { return points * bid; } 
10.   } 
11.   public static void main(String[] args) { 
12.     System.out.println(Suits.NOTRUMP.getBidValue(3)); 
13.     System.out.println(Suits.SPADES + " " + Suits.SPADES.points); 
14.     System.out.println(Suits.values()); 
15.   } 
16. } 

À la ligne 8, les points sont déclarés comme étant privés, et à la ligne 13, vous y accédez, donc, d'après ce que je peux voir, ma réponse serait que la compilation échoue. Mais la réponse dans le livre dit le contraire. Est-ce que je manque quelque chose ici ou est-ce une faute de frappe dans le livre?

Était-ce utile?

La solution

Tout le code d'une classe externe unique peut accéder à tout élément de cette classe externe, quel que soit son niveau d'accès.

Autres conseils

Pour développer ce que dit stepancheg:

Extrait de la section 6.6 de la spécification du langage Java. 1 "Détermination de l'accessibilité" :

  

si le membre ou le constructeur est   déclaré privé, alors l'accès est   permis si et seulement si cela se produit   dans le corps de la classe de premier niveau   qui entoure la déclaration de la   membre ou constructeur.

Essentiellement, private ne signifie pas privé pour cette classe, mais privé pour la classe de niveau supérieur.

Première vérification à la ligne 12

  System.out.println(Suits.NOTRUMP.getBidValue(3)); 

getBidValue n'est pas défini

De même, une classe interne peut accéder aux membres privés de sa classe externe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top