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