Puzzle de visibilidade de classe interna de Java

Considere o seguinte caso:

public class A {
  public A() { b = new B(); }
  B b;
  private class B { }
}

A partir de um aviso no Eclipse, cito isso: o complemento java emula o construtor A.B () por um método de acesso sintético. Eu suponho que o compilador agora vá em frente e crie um construtor extra "debaixo de água" para B.

Eu sinto que isso é um pouco estranho: por que a classe B não seria visível como a.k.o. campo em um? E: significa que a classe B não é mais privada em tempo de execução? E: por que se comporta a palavra-chave protegida para a classe B diferente?

public class A {
  public A() { b = new B(); }
  B b;
  protected class B { }
}

questionAnswers(4)

yourAnswerToTheQuestion