删除访问修饰符
Java最初确实具有private protected
修饰符,但在JDK 1.0.2(第一个稳定版本,即我们今天所知的Java 1.0)中已将其删除。关于JDK 1.0.2的一些教程(此处和此处)说明如下:
注意:Java语言的1.0版本支持五个访问级别:上面列出的四个加号private protected
。该private protected
访问级别不高的Java版本比1.0的支持; 您不应再在Java程序中使用它。
关于SoftwareEngineering.SE的另一个答案指出:
Java最初具有这样的修饰符。它是编写的,private protected
但是在Java 1.0中已删除。
现在看一下Java版本历史记录:
JDK 1.0
第一个版本于1996年1月23日发布,名为Oak。第一个稳定版本JDK 1.0.2被称为Java 1。
由此,我们可以得出结论,有关1.0.2版的教程指的是第一个版本JDK 1.0,该语言称为Oak,而来自SoftwareEngineering.SE的则指第一个稳定版本JDK 1.0.2,称为Java。 1.0,已将其删除。
现在,如果您尝试在Java 1.0文档中进行搜索,将找不到它,因为如前所述,它已在JDK 1.0.2中删除,否则称为Java 1.0。当您查看发布的链接的“上次修改时间”时,再次证明了这一点。您发布的链接的最后一次修改是在1996年2月。Java 1.0 / JDK 1.0.2 private protected
被删除后,于1996年2月之后发布,并根据规范于1996年8月发布。
移除原因
有些资料还解释了的原因private protected
,例如这一点。报价:
什么是私人保护的?
早期,Java语言允许使用某些修饰符组合,其中之一是private protected
。的含义private protected
是将可见性严格限制在子类中(并删除程序包访问权限)。后来有人认为这有点前后矛盾,过于复杂,不再得到支持。[5]
[5] protected
修饰符的含义在Java的Beta2版本中已更改,并且该private protected
组合同时出现。他们修补了一些潜在的安全漏洞,但使许多人感到困惑。
而且,SoftwareEngineering.SE也支持这一点,因为它不值得引起不一致和额外的复杂性,因此很早就将其删除。
解释
我对所有这些的解释是,也许在橡树时代,两者都被允许共存(因此合并)。由于protected
的含义发生了变化1,有可能是一个需要允许private
并protected
在同一时间。简介变得太复杂了,不值得,最后被删除了。到Java 1.0 / JDK 1.0.2发行时,它已被删除,因此无法在文档中找到。
1在《Oak语言规范》第4.10节“ 访问变量和方法”中,应注意默认修饰符为protected
:
默认情况下,类中的所有变量和方法均受保护。
这与我们今天的默认程序包访问权限完全不同。这可能为的需求铺平了道路private protected
,因为private
它过于严格且protected
过于宽容。