Rompecabezas de visibilidad de la clase interna de Java
Considere el siguiente caso:
public class A {
public A() { b = new B(); }
B b;
private class B { }
}
De una advertencia en Eclipse cito que: el compilador java emula al constructor A.B () mediante un método de acceso sintético. Supongo que el compilador ahora sigue adelante y crea un constructor adicional "debajo del agua" para B.
Creo que esto es bastante extraño: ¿por qué la clase B no sería visible como a.k.o. campo en A? Y: ¿significa que la clase B ya no es privada en el tiempo de ejecución? Y: ¿por qué se comporta la palabra clave protegida para la clase B diferente?
public class A {
public A() { b = new B(); }
B b;
protected class B { }
}