java类成员的访问级别
我意识到这是一个非常基本的问题,但一直困扰着我。据我所知,如果在Java中声明一个私有字段,那么它在该类之外是不可见的。如果它受到保护,则继承类和同一包中的任何内容都可以使用它(如果其中任何一个定义不正确,请更正我) 这是否意味着不能声明一个字段,该字段只能由继承类访问,而不能由同一包中的其他非继承类访问 我很感激有很多方法可以解决这个问题,但是有没有这样的例子,当你想要这种行为的时候 显然,上述问题适用于方法和领域 非常感谢。请参阅:java类成员的访问级别,java,encapsulation,Java,Encapsulation,我意识到这是一个非常基本的问题,但一直困扰着我。据我所知,如果在Java中声明一个私有字段,那么它在该类之外是不可见的。如果它受到保护,则继承类和同一包中的任何内容都可以使用它(如果其中任何一个定义不正确,请更正我) 这是否意味着不能声明一个字段,该字段只能由继承类访问,而不能由同一包中的其他非继承类访问 我很感激有很多方法可以解决这个问题,但是有没有这样的例子,当你想要这种行为的时候 显然,上述问题适用于方法和领域 非常感谢。请参阅: 包>子类,您永远不能有一个字段只能由子类看到,而不能由同一
包>子类,您永远不能有一个字段只能由子类看到,而不能由同一包中的类看到。基本上:
- 私有:只能由类访问
- 公共:可由任何类访问
- 受保护:可由类、所有继承类和当前包(已编辑)的类访问
- 未定义范围:可由当前包的所有类访问
更多信息。是的,Java的受保护访问在这方面有点奇怪。我一点也不明白为什么它是可取的。就我个人而言,对于字段来说这并不困扰我,因为我不喜欢非私有字段(常量除外),但对于其他成员也是如此
NET根本没有包/命名空间访问可见性的概念,但它有一个替代方案,即程序集(想想“jar文件”-不完全相同,但很接近)。坦率地说,我希望有名称空间和部署单元可见性选项,但似乎我注定要失望…Protected拥有包访问权限,请参阅此处的其他响应以及链接。只是对词汇表的一点说明:这里所说的是变量的可访问性(或可见性)。变量的作用域是代码中可以使用变量的部分(例如,局部变量的作用域是方法的主体,或者它在其中定义的块)。但是仍然存在包级访问受保护对象的问题。。。因此,是的,模块会有所帮助,但仍然不理想:((我也更喜欢“nested has access to outer privates”的C#概念,而不是Java中的相反概念。)