内部类方法和私有字段

psw*_*rdf 2 java oop

为什么内部类可以访问此类的输入对象参数的私有字段?

private class Inner {
    private int privatefield = 0;

    public void method( Inner inner ) {
        privatefield = 1; //ok
        inner.privatefield = 1; //this line confusing me (broken incapsulation)
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

这与内部类本身无关.

类中的代码始终可以访问Java中同一类的私有成员.private/ publicetc 的概念指的是代码所在的位置,而不是它是指"this"实例还是不同的实例.受保护的访问比其他访问稍微复杂一些,但同样的一般原则适用.

有关详细信息,请参阅JLS第6.6节.特别是:

否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.

这解释了为什么一个嵌套类可以访问另一个嵌套类的私有字段,只要它们根据您的注释嵌套在同一个顶级类中.这是一个奇怪的规则,我同意-我喜欢的C#中的条款的做法private可访问性和嵌套类型-但上述报价显示,编译器服从JLS的规则.

我怀疑理由是,如果你在同一个顶级类中工作,那么你负责该类中的所有代码,包括嵌套类 - 所以你被信任不要滥用它们.