Я не понимаю, почему это компилируется. f() и g() видны из внутренних классов, несмотря на то, что они являются частными. Специально ли они рассматриваются специально, потому что они являются внутренними классами?
Если A и B не являются статическими классами, это все равно.
class NotPrivate {
private static class A {
private void f() {
new B().g();
}
}
private static class B {
private void g() {
new A().f();
}
}
}