Почему доступ к частному члену вложенного класса можно получить с помощью методов входящего класса?
Может ли кто-нибудь рассказать мне об уровне доступа частного участника? Я довольно часто смутился с этим фрагментарным кодом: почему к частному члену k класса Line можно получить доступ к методу "print" класса outter?
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);
}
}
Ответы
Ответ 1
Правила находятся в главе JLS по доступности
В противном случае, если член или конструктор объявлен private
, тогда доступ разрешен только тогда, когда он встречается внутри тела класс верхнего уровня (§7.6), который включает объявление члена или конструктор.
Здесь поле участника k
объявляется в классе Line
. Когда вы обращаетесь к нему в методе print
, вы получаете доступ к нему внутри тела класса верхнего уровня, который включает объявление этого элемента.
В главе о классах верхнего уровня здесь.