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 { }
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta