2013-11-02 10 views
8

Qualcuno potrebbe dirmi sul livello di accesso di un membro privato? Sono stato confuso con questo codice pezzo da un po 'di tempo: perché il membro privato, k della classe Line, è accessibile nel metodo "print" di outter class?Perché è possibile accedere al membro privato di una classe nidificata mediante i metodi della classe di inclusione?

public class myClass { 
    public static class Line{ 
     private double k; 
     private double b; 
     private boolean isVertical; 

     public Line(double k, double b, boolean isVertical){ 
      this.k = k; 
      this.b = b; 
      this.isVertical = isVertical; 
     } 

    } 

    public static boolean print(Line line){ 
     System.out.println(line.k); 
    } 
} 

risposta

22

Le regole sono in JLS chapter on accessibility

In caso contrario, se il membro o il costruttore è dichiarato private, quindi accesso è consentito se e solo se si verifica all'interno del corpo di livello superiore classe (§7.6) che include la dichiarazione del membro o del costruttore .

Qui il campo membro k viene dichiarato nella classe Line. Quando lo si accede nel metodo print, si accede a esso all'interno del corpo della classe di livello superiore che include la dichiarazione di tale membro.

Il capitolo sulle classi di livello superiore è here.

Problemi correlati