在 Java 中,我们有四个访问说明符:public
, protected
、包私有(默认)和private
。这是well https://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private/215579#215579 known https://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private/215579#215579对我来说不是问题。
我的问题是关于命名protected
。如图所示这里的桌子 https://stackoverflow.com/a/215505/732016,为字段提供 package-private 的默认访问说明符可防止包外部的子类使用它,但应用关键字protected
实际上并没有保护它——相反,它向任何包的子类开放它。
那么,为什么不protected
保护事物;为什么less限制性比根本没有修饰符?
如果我们接受这些是应该存在的四个访问级别(私有、包私有、包私有加子类和公共),并且我们接受包私有应该是默认访问级别,而您不这样做指定其他内容,那么这个问题就变成:“为什么 package-private-plus-subclasses 被称为protected
?”答案是它借用/继承了 C++ 的术语(C++ 没有“包”的概念,但使用protected
意思是“私有加子类”)。
(我将这个答案发布为社区维基,以鼓励其他人添加它,因为我猜测这个故事不仅仅是这个。另外,因为有人可能想添加一些理由来解释为什么这些是四个访问权限应该存在的级别 - 例如,为什么我们有 package-private-plus-subclasses 但没有 private-plus-subclasses - 以及为什么 package-private 应该是默认值。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)