6

我意识到这是一个非常基本的问题,但它一直困扰着我。据我了解,如果您在 Java 中声明一个私有字段,那么它在该类之外是不可见的。如果它受到保护,那么它可用于继承的类和同一包中的任何东西(如果其中任何一个定义不正确,请纠正我)。

这是否意味着不能声明一个只能被继承类访问的​​字段,而不是同一包中的其他非继承类?

我很欣赏有办法解决这个问题,但是有没有你想要这种行为的情况?

显然,上述问题适用于方法和领域。

非常感谢。

4

3 回答 3

12

请参阅:http: //java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
包 > 子类,您永远不能拥有仅由子类可见的字段,而不能由同一包中的类可见。

于 2009-01-21T10:30:14.947 回答
4

基本上:

  • private:只能由类访问。
  • public:任何类都可以访问。
  • protected:类、所有继承的类和当前包的类(已编辑)均可访问。
  • 未定义范围:当前包的所有类都可以访问。

更多信息在这里

于 2009-01-21T10:31:33.370 回答
2

是的,Java 的受保护访问有点奇怪。我无法立即明白为什么它是可取的。就我个人而言,字段并不困扰我,因为我不喜欢非私有字段(常量除外),但其他成员也是如此。

.NET 根本没有包/命名空间访问可见性的概念,但它有一个替代方案,即程序集(想想“jar 文件”——不完全相同,但很接近)。坦率地说,我想要命名空间部署单元可见性选项,但似乎我注定要失望......

于 2009-01-21T10:33:28.293 回答