访问java类成员的级别

时间:2009-01-21 10:27:24

标签: java encapsulation

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

这是否意味着无法声明只有继承类可访问的字段而不能在同一个包中声明其他非继承类?

我很欣赏有这种方法可以解决这个问题,但有没有想要这种行为的情况呢?

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

非常感谢。

3 个答案:

答案 0 :(得分:11)

请参阅:http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
套餐>子类,您永远不能只有子类可见的字段,而不能来自同一个包的类。

答案 1 :(得分:3)

基本上:

  • 私人:只能由班级访问。
  • public:任何类别都可以访问。
  • protected:可由类访问,所有继承的类和当前包的类(已编辑)
  • 未定义范围:当前包的所有类都可访问。

更多信息here

答案 2 :(得分:2)

是的,Java的受保护访问在这方面有点奇怪。我不能立刻明白为什么它是可取的。就个人而言,它不会打扰我 fields ,因为我不喜欢非私有字段(除了常量),但其他成员也是如此。

.NET根本没有包/命名空间访问可见性的概念,但它有一个替代方法就是汇编(想想“jar文件” - 不完全一样,但是关闭)。坦率地说,我想要命名空间部署单元可见性选项,但似乎我注定要失望......

相关问题