我看到一些参考文献提到Java中名为private protected的访问修饰符(两个词合在一起):

private protected someMethod() {

}

我发现其中一页提到了这一点,是here页.我的学校课程也提到了这个访问修饰符(并说它存在).但是,使用它会在Java语言中导致错误.

我try 了变量和方法,我非常确定它不存在,但我想要一个对发生的事情的解释.有没有考虑过,然后又拒绝了?还是在较新版本的Java中删除了它?

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

推荐答案

删除访问修饰符

Java最初确实有private protected修饰符,但它在JDK1.0.2中被删除(第一个stable版本,我们今天知道的Java1.0).一些关于JDK 1.0.2(herehere)的教程如下:

注意:Java语言的1.0版本支持五种访问级别:上面列出的四种加上private protected.高于1.0的Java版本不支持private protected访问级别;您不应该再在Java程序中使用它.

另有answer on SoftwareEngineering.SE个州:

Java最初有这样一个修饰符.它是private protected年前编写的,但在Java 1.0中被删除.

现在让我们来看看这Java Version History个人:

JDK 1.0

第一个版本于2010年10月10日发布,名为Oak.The first stable version, JDK 1.0.2, is called Java 1.

由此,我们可以得出结论,关于1.0.2版的教程参考了第一个版本JDK 1.0,该语言被称为Oak,但来自软件工程.SE指的是第一个稳定的版本,JDK1.0.2,称为Java1.0,在那里它被删除了.

现在,如果您try 在Java 1.0 documentation中搜索它,您将找不到它,因为如前所述,它在JDK 1.0.2(也称为Java 1.0)中被删除了.当您查看您发布的链接的"上次修改"时间时,这一点再次得到证明.您发布的链接上次修改是在1996年2月.当private protected被移除时,Java1.0/JDK 1.0.2发布了after February of 1996,根据规范,发布时间是1996年8月.

移走的理由

一些来源也解释了private protected的原因,比如this一个.引用:

What was private protected?

早期,Java语言允许某些修饰符的组合,其中一个是private protected.private protected的含义是将可见性严格限制为子类(并删除包访问).这后来被认为有些不一致和过于复杂,不再被支持.

[5] 在Java的Beta2版本中,protected修饰符的含义发生了变化,同时出现了private protected组合.他们修补了一些潜在的安全漏洞,但让许多人感到困惑.

还有软件工程.SE也支持这一点,说它不值得出现不一致和额外的复杂性,所以它很早就被删除了.

理解

我对这一切的解释是,也许在橡树时代,两者被允许共存(因此出现了组合).由于protected的含义已更改1,可能需要同时允许privateprotected.介绍变得太复杂了,不值得这样做,最终被放弃了.到Java 1.0/JDK 1.0.2发布时,它已经被删除,因此在文档中找不到它.


1Oak Language Specification的第4.10、Access to Variables and Methods节中,需要注意的是默认修饰符是protected:

默认情况下,类中的所有变量和方法都是protected.

这与我们今天使用的默认包访问方式大不相同.这可能为private protected人的需求铺平了道路,因为private人太过严格,protected人太过宽松.

Java相关问答推荐

在现有Json文件中添加新记录

Java应用程序崩溃时试图读取联系人从电话

如何在Javascript中设置文本区域圆角的样式

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

无法了解Java线程所消耗的时间

从Spring5迁移到Spring6:无法在雅加达包中找到类

Bean定义不是从Spring ApplationConext.xml文件加载的

对字符串长度进行排序,但颠倒了顺序(最长字符串在前)

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

虚拟线程应该很快消亡吗?

二进制数据的未知编码/序列化

嘲笑黄瓜中的对象

如何调整JButton的大小以适应图标?

在Java Spring JPA中插入包含对其他实体的引用的列

为什么没有加载java.se模块?

无法在Java中获取ElastiCache的AWS CloudWatch指标

在Java中比较同一多维数组的两个不同的字符串元素

基于距离的APACHE POI公式判断

让标签占用JavaFX中HBox的所有可用空间

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序