Sichtbarkeitspuzzlespiel der Java-inneren Klasse

Betrachten Sie den folgenden Fall:

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

Aus einer Warnung in Eclipse zitiere ich Folgendes: Der Java-Complier emuliert den Konstruktor A.B () mit einer synthetischen Zugriffsmethode. Ich nehme an, der Compiler geht jetzt voran und erstellt einen zusätzlichen "Unterwasser" -Konstruktor für B.

Ich finde das ziemlich seltsam: warum sollte Klasse B nicht als a.k.o. sichtbar sein? Feld in A? Und: Bedeutet das, dass Klasse B zur Laufzeit nicht mehr privat ist? Und: warum verhält sich das geschützte Schlüsselwort für Klasse B anders?

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage