小编典典

Java是否具有“专用保护”访问修饰符?

java

我已经看到一些参考引用了Java中称为private protected(两个词在一起)的访问修饰符:

private protected someMethod() {

}

我发现与此有关的页面之一在这里。我的学校课上也提到了这个访问修饰符(并说它存在)。但是,使用它会导致Java语言错误。

我尝试了变量和方法,我很确定它不存在,但是我想解释一下发生了什么。是否考虑过然后拒绝了?还是在新版本的Java中将其删除?

编辑:我不是在寻找有关protected关键字的信息。


阅读 215

收藏
2020-11-01

共1个答案

小编典典

删除访问修饰符

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

第一个版本于 19961月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组合同时出现。他们修补了一些潜在的安全漏洞,但使许多人感到困惑。

而且,SoftwareEngineering.SE也对此表示支持,因为它不值得引起不一致和额外的复杂性,因此很早就将其删除。

解释

我对所有这些的解释是,也许在橡树时代,两者都被允许共存(因此合并)。由于protected的含义发生了变化1,有可能是一个需要允许privateprotected在同一时间。简介变得太复杂了,不值得,最终被删除了。到Java
1.0 / JDK 1.0.2发行时,它已被删除,因此在文档中找不到。


1在《Oak语言规范》第4.10节“
访问变量和方法”中 ,应注意默认修饰符为protected

默认情况下,类中的所有变量和方法均受 保护

这与我们今天的默认程序包访问权限完全不同。这可能为的需求铺平了道路private protected,因为private它过于严格且protected过于宽容。

2020-11-01