Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java类成员的访问级别_Java_Encapsulation - Fatal编程技术网

java类成员的访问级别

java类成员的访问级别,java,encapsulation,Java,Encapsulation,我意识到这是一个非常基本的问题,但一直困扰着我。据我所知,如果在Java中声明一个私有字段,那么它在该类之外是不可见的。如果它受到保护,则继承类和同一包中的任何内容都可以使用它(如果其中任何一个定义不正确,请更正我) 这是否意味着不能声明一个字段,该字段只能由继承类访问,而不能由同一包中的其他非继承类访问 我很感激有很多方法可以解决这个问题,但是有没有这样的例子,当你想要这种行为的时候 显然,上述问题适用于方法和领域 非常感谢。请参阅: 包>子类,您永远不能有一个字段只能由子类看到,而不能由同一

我意识到这是一个非常基本的问题,但一直困扰着我。据我所知,如果在Java中声明一个私有字段,那么它在该类之外是不可见的。如果它受到保护,则继承类和同一包中的任何内容都可以使用它(如果其中任何一个定义不正确,请更正我)

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

我很感激有很多方法可以解决这个问题,但是有没有这样的例子,当你想要这种行为的时候

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

非常感谢。

请参阅:
包>子类,您永远不能有一个字段只能由子类看到,而不能由同一包中的类看到。

基本上:

  • 私有:只能由类访问
  • 公共:可由任何类访问
  • 受保护:可由类、所有继承类和当前包(已编辑)的类访问
  • 未定义范围:可由当前包的所有类访问

更多信息。

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


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

Protected拥有包访问权限,请参阅此处的其他响应以及链接。只是对词汇表的一点说明:这里所说的是变量的可访问性(或可见性)。变量的作用域是代码中可以使用变量的部分(例如,局部变量的作用域是方法的主体,或者它在其中定义的块)。但是仍然存在包级访问受保护对象的问题。。。因此,是的,模块会有所帮助,但仍然不理想:((我也更喜欢“nested has access to outer privates”的C#概念,而不是Java中的相反概念。)