Во вложенных классах Java действительно ли класс включения может получить доступ к членам парламента, не занимающим официального поста внутренних классов?

В 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;
    }
}
19
задан user236215 10 February 2010 в 14:03
поделиться

1 ответ

Да, нормально. Из JLS, раздел 6.6.1 :

В противном случае, если член или конструктор объявлен частным , то доступ разрешен тогда и только тогда, когда он происходит в теле класс верхнего уровня (§7.6), который включает объявление члена или конструктора.

Вы даже можете ссылаться на закрытый член вложенного типа X внутри другого вложенного типа Y, если они совместно используют класс верхнего уровня.

На уровне байт-кода, я полагаю, все это реализовано путем добавления синтетических методов доступа к пакетам.

24
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: