我已经看到一些参考引用了Java中称为private protected(两个词在一起)的访问修饰符:
private protected
private protected someMethod() { }
我发现与此有关的页面之一在这里。我的学校课上也提到了这个访问修饰符(并说它存在)。但是,使用它会导致Java语言错误。
我尝试了变量和方法,我很确定它不存在,但是我想解释一下发生了什么。是否考虑过然后拒绝了?还是在新版本的Java中将其删除?
编辑:我不是在寻找有关protected关键字的信息。
protected
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。
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月。Java1.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组合同时出现。他们修补了一些潜在的安全漏洞,但使许多人感到困惑。
什么是私人保护的?
早期,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发行时,它已被删除,因此在文档中找不到。
private
1在《Oak语言规范》第4.10节“ 访问变量和方法”中 ,应注意默认修饰符为protected:
默认情况下,类中的所有变量和方法均受 保护 。
这与我们今天的默认程序包访问权限完全不同。这可能为的需求铺平了道路private protected,因为private它过于严格且protected过于宽容。