我已经看到一些参考引用了Java中称为private protected
(两个词在一起)的访问修饰符:
private protected someMethod() {
}
我发现与此有关的页面之一在这里。我的学校课上也提到了这个访问修饰符(并说它存在)。但是,使用它会导致Java语言错误。
我尝试了变量和方法,我很确定它不存在,但是我想解释一下发生了什么。是否考虑过然后拒绝了?还是在新版本的Java中将其删除?
编辑:我不是在寻找有关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。
由此,我们可以得出结论,有关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,有可能是一个需要允许private
并protected
在同一时间。简介变得太复杂了,不值得,最终被删除了。到Java
1.0 / JDK 1.0.2发行时,它已被删除,因此在文档中找不到。
1在《Oak语言规范》第4.10节“
访问变量和方法”中 ,应注意默认修饰符为protected
:
默认情况下,类中的所有变量和方法均受 保护 。
这与我们今天的默认程序包访问权限完全不同。这可能为的需求铺平了道路private protected
,因为private
它过于严格且protected
过于宽容。
问题内容: 在Objective-C实例数据可以是,或。例如: 在Swift参考中,我还没有提到访问修饰符。是否有可能限制Swift中数据的可见性? 问题答案: 从 Swift 3.0.1开始 ,共有 4级访问权限 ,从最高(最低限制)到最低(最高限制)进行描述。 1. 和 允许在定义模块(目标)之外使用实体。指定框架的公共接口时,通常使用或访问。 但是, 访问权限仅适用于类和类成员,它与访问不同
问题内容: 我在理解Java(或其背后的设计)中的受保护的访问修饰符时遇到了一些麻烦。我认为这意味着程序包访问和通过继承包含抽象成员的类的对象的访问。 我编写了以下示例代码。我看到,如果未注释,注释掉的行会产生编译错误。为什么我可以通过Second中的Second对象而不是Second中的First对象访问pro? 问题答案: 该网页链接@MadProgrammer给出了一个体面的解释: “ pr
根据留档(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)的第二个表,没有标识符的成员对子类不可见。 但是,当我运行下面的示例代码时,“1”(b的内容)被打印出来! 如果没有访问修饰符的成员不能从子类访问,那么为什么在本例中打印它 它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?
我在package1中有一个名为a的类,在Package2中有另一个名为C的类。C类扩展了A类。 A有一个实例变量,声明如下: 这是怎么回事?
在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。本文将详细介绍访问控制修饰符。 在实际生活中,如果要获取某件物品,与其直接穿过堡垒的墙壁,从而导致墙壁毁灭和破坏,不如通过门口的警卫请求进入堡垒的许可。一般而言
问题内容: 我知道这不仅适用于Java,而且适用于许多语言,但这是我最熟悉的语言。 我了解修饰符的作用以及如何使用它们。我只想知道,为什么我们需要它们?为什么每个对象都无法访问,无论是否需要访问? 问题答案: 当您必须维护更大的项目时,原因变得更加明显。当方法或变量是公共的时,对它进行更改时必须小心,因为您永远不知道代码库的哪些部分依赖于它的确切行为。 但是,当变量或方法是私有的时,您会知道该变量