私は持っている
class A {
private static class B {
B() {
}
}
}
B はプライベートですが、問題なく別のクラスから A$B.class をロードします。なぜそれが許されるのですか?
class C {
public static void main(String[] args) throws Exception {
System.out.println(Class.forName("A$B").newInstance());
}
}
出力
A$B@affc70
アップデート
クラスをロードするための制限が意図的に引き上げられていることは理解していますが、それには合理的な説明が必要です。
パッケージのプライベート B{} コンストラクターは意図的にあることに注意してください。私がそれを削除すると、私は取得します
java.lang.IllegalAccessException: クラス B は修飾子 "private" を使用してクラス A$B のメンバーにアクセスできません