Я сейчас читаю "Эффективную Java" Джошуа Блоха, и мне это нравится! Но на стр. 112 (Пункт 24) Блох пишет:
Статический класс-член - это самый простой тип вложенного класса. Его лучше всего воспринимать как обычный класс, который, как считается, объявляется внутри другого класса и имеет доступ ко всем членам входящих классов, даже к тем, кто объявлен частным.
И это меня действительно смущает. Я бы сказал:
Статический класс-член - это самый простой тип вложенного класса. Это лучше всего воспринимается как обычный класс, который, как считается, объявляется внутри другого класса и имеет доступ ко всем включенным классам статическим членам, даже объявленным частным.
Вот фрагмент, который иллюстрирует мое понимание цитаты:
public class OuterClass {
public void printMessage(String message) {
System.out.println(message);
}
private static class InnerClass {
public void sayHello() {
printMessage("Hello world!"); //error: Cannot make a static reference to the non-static method printMessage(String)
}
}
}
Вы можете видеть, что метод InnerClass sayHello не имеет доступа к методу printMessage OuterClass, поскольку он объявлен в статическом внутреннем классе, тогда как метод printMessage является методом экземпляра. Похоже, автор предлагает, чтобы статический класс-член мог получить доступ к нестатическим полям окружающего класса. Я убежден, что в своем последнем предложении я что-то не понял, но я не могу понять, что. Любая помощь будет оценена!
edit: Я изменил видимость двух методов, потому что это не имеет отношения к моему вопросу. Меня интересуют статические члены, а не частные члены.