Я новичок в Java, изучая Java из учебника Oracle Java. Теперь я узнаю о вложенных классах, статических классах и внутренних классах. Я нашел следующее объяснение, которое кажется странным, и я думаю, что это неправильно.
От: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Вложенный класс является членом его охватывающего класса. Нестатические вложенные классы (внутренние классы) имеют доступ к другим членам охватывающего класса, даже если они объявлены частными. Статические вложенные классы не имеют доступа к другим членам входящего класса
Последнее предложение "Статические вложенные классы не имеют доступа к другим членам охватывающего класса" является странным, но может относиться к членам экземпляра, говоря, что статический класс похож на статический метод, не имеющий доступа к переменным экземпляра. Но следующая заметка еще более странная:
Примечание. Статический вложенный класс взаимодействует с членами экземпляра его внешнего класса (и других классов), как и любой другой класс верхнего уровня. По сути, статический вложенный класс поведенчески является классом верхнего уровня, который был вложен в другой класс верхнего уровня для удобства упаковки.
Это кажется странным, так как это означает, что статический класс не может получить доступ к частным экземплярам внешнего класса. Я написал следующий код, который компилируется и запускается, и демонстрирует, что статический класс может обращаться к внешним переменным внешнего экземпляра.
public class A {
private int x;
static private int y;
static public class B{
static void doSomething(){
y++;
System.out.println("y is now " + y );
}
static void doSomethingElse(A a)
{
a.x++;
System.out.println("a.x is " + a.x );
}
}
}
// ------
public class Main {
public static void main(String[] args){
A a = new A();
A.B b = new A.B();
b.doSomething();
b.doSomethingElse(a);
}
}
Это ошибка в учебнике, или я, может быть, не понимаю что-то хорошее? Спасибо