为什么内部类可以访问此类的输入对象参数的私有字段?
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)
这与内部类本身无关.
类中的代码始终可以访问Java中同一类的私有成员.private
/ public
etc 的概念指的是代码所在的位置,而不是它是指"this"实例还是不同的实例.受保护的访问比其他访问稍微复杂一些,但同样的一般原则适用.
有关详细信息,请参阅JLS第6.6节.特别是:
否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.
这解释了为什么一个嵌套类可以访问另一个嵌套类的私有字段,只要它们根据您的注释嵌套在同一个顶级类中.这是一个奇怪的规则,我同意-我喜欢的C#中的条款的做法private
可访问性和嵌套类型-但上述报价显示,编译器是服从JLS的规则.
我怀疑理由是,如果你在同一个顶级类中工作,那么你负责该类中的所有代码,包括嵌套类 - 所以你被信任不要滥用它们.
归档时间: |
|
查看次数: |
278 次 |
最近记录: |