これは、内部クラス自体とは何の関係もありません。
クラス内のコードは、常にJava の同じクラスのプライベート メンバーにアクセスできます。private
/ etcの概念はpublic
、「この」インスタンスを参照するか別のインスタンスを参照するかではなく、コードが存在する場所を参照します。保護されたアクセスは、他のアクセスよりも少し複雑ですが、同じ一般原則が適用されます。
詳細については、 JLS セクション 6.6を参照してください。特に:
それ以外の場合、メンバーまたはコンストラクターがプライベートと宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内で発生した場合にのみ、アクセスが許可されます。
そして、コメントに従って、ネストされたクラスが同じトップレベルクラス内にネストされている限り、ネストされたクラスが別のネストされたクラスのプライベートフィールドにアクセスできる理由を説明しています。これは奇妙なルールです。私は同意します。private
アクセシビリティとネストされた型の点で C# のアプローチを好みますが、上記の引用は、コンパイラがJLS のルールに従っていることを示しています。
同じ最上位クラス内で作業している場合、ネストされたクラスを含むそのクラス内のすべてのコードに責任があるため、それらを悪用しないと信頼されているというのが理由だと思います。