2009-05-04 21 views
6

Este código se toma de un examen de práctica SCJP:Una pregunta acerca de las enumeraciones definidas dentro de una clase en Java

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. } 

En la línea 8 points se declara como privada, y en la línea 13 que está siendo accedido, por lo que desde lo Puedo ver que mi respuesta sería que la compilación falla. Pero la respuesta en el libro dice lo contrario. ¿Me estoy perdiendo algo aquí o es un error tipográfico en el libro?

Respuesta

11

Todo el código dentro de la clase externa solo se puede acceder a cualquier cosa en esa clase externa sea cual sea el nivel de acceso es.

3

Primera línea de salida 12

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

getBidValue no está definido

+0

se define en la línea 6 – Vasil

+0

@Vasil: en la línea 6 dice "getValue" no "getBidValue" – newacct

+0

lo siento, entonces hay un error tipográfico después de todo. +1 por notar eso. – Vasil

5

Para ampliar lo stepancheg dicho:

Desde el Java Language Specification section 6.6.1 "Determining Accessibility":

si el miembro o constructor se declararon privado, entonces el acceso es permitida si y sólo si se produce dentro del cuerpo de la clase de nivel superior que incluye la declaración del miembro 0 constructor .

Esencialmente, private no significa privado para esta clase, significa privado para la clase de nivel superior.

0

De forma similar, una clase interna puede acceder a miembros privados de su clase externa.

Cuestiones relacionadas