类和字段的可见性之间的相互作用

Rom*_*man 2 java visibility packages

我了解到一个类可以是public也可以是package-private(最后一个值是默认值).类的字段也可以是公共字段或包私有字段.这些"状态"具有相同的含义.如果某些东西是包私有的,那么它只在同一个包中可见.它是公开的,从任何地方(从任何包装)都可以看到.

我不清楚这些状态是如何相互影响的.特别是我对以下两种情况感兴趣:

  1. 该类是公开的,但其字段是包私有的.这个字段只能从包中看到吗?

  2. 该类是包私有的,它有一个公共字段.这个领域会在哪里唱歌?

一般情况下,我不明白为什么我们打扰一个类是公共的还是包私有的,如果在任何情况下,我们指出它是公共的还是包私有的类的任何单个组件(字段和方法).

Xr.*_*Xr. 5

最严格的可见性适用.您的问题的答案是:

  1. 是.
  2. 仅包装.

包类中的公共字段通常没有多大意义.

有一些细微之处:封闭类可以读取私有嵌套类中的私有字段(尽管由于隐式添加了合成访问器,这会导致一些性能损失).

Sun的教程中有关于可见性的简短说明.另请参阅嵌套类的部分.

编辑:为了您的兴趣,反思也允许篡改可见性.