В Java внутренний класс может получить доступ к членам парламента, не занимающим официального поста включения класса. Но действительно ли внешний класс может получить доступ к членам парламента, не занимающим официального поста внутреннего класса? Это независимо от того, статичен ли внутренний класс или нет. Я думал, что это не верно, но следующий код, кажется, компилирует и хорошо работает.
public class Outer {
class Inner {
private int i = 0;
private Inner() {}
}
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner oi = o.new Inner();
oi.i = 10;
}
}
Да, нормально. Из JLS, раздел 6.6.1 :
В противном случае, если член или конструктор объявлен
частным
, то доступ разрешен тогда и только тогда, когда он происходит в теле класс верхнего уровня (§7.6), который включает объявление члена или конструктора.
Вы даже можете ссылаться на закрытый член вложенного типа X внутри другого вложенного типа Y, если они совместно используют класс верхнего уровня.
На уровне байт-кода, я полагаю, все это реализовано путем добавления синтетических методов доступа к пакетам.