Головоломка видимости внутреннего класса Java
Рассмотрим следующий случай:
public class A {
public A() { b = new B(); }
B b;
private class B { }
}
Из предупреждения в Eclipse я цитирую следующее: компилятор java эмулирует конструктор A.B () с помощью синтетического метода доступа. Я предполагаю, что компилятор теперь идет вперед и создает дополнительный «под водой» конструктор для Б.
Я чувствую, что это довольно странно: почему класс B не будет виден как a.k.o. поле в А? И: означает ли это, что класс B больше не является частным во время выполнения? И: почему поведение защищенного ключевого слова для класса B отличается?
public class A {
public A() { b = new B(); }
B b;
protected class B { }
}