当前位置: 首页 > 面试题库 >

Java中默认访问说明和受保护访问说明之间的区别

申屠英韶
2023-03-14
问题内容

我正在尝试学习Java,当我经过访问说明符时,我对此表示怀疑。如果未指定默认值,则默认值与java中的受保护访问说明符有什么区别?


问题答案:

protected说明符允许所涉及类的所有子类访问它们,无论它们驻留在什么包中,以及同一包中的其他代码。默认说明符允许同一程序包中的其他代码访问,但不允许位于不同程序包中的子类中的代码访问。参见Java语言规范6.6节。

编辑:根据MichaelSchmeißer的要求(因此其他人不必阅读注释或单击链接来查找此内容):接口的所有成员都是隐式公共的。实际上,为接口成员指定任何访问说明符是编译时错误,而不是public(尽管没有访问说明符默认为公共访问)。这是JLS中针对类成员的完整规则集(有关软件包,顶级类和接口以及数组的规则,请参见上面的链接):

引用(类,接口或数组)类型的成员(类,接口,字段或方法)或类类型的构造函数仅在可访问类型且声明该成员或构造函数允许访问的情况下才可访问:

  • 如果将成员或构造函数声明为公共,则允许访问。

  • 接口的所有成员都是隐式公共的。

  • 否则,如果将成员或构造函数声明为受保护的,则仅当以下条件之一为真时才允许访问:

  • 对成员或构造函数的访问从包含声明受保护的成员或构造函数的类的包内进行。

* 如§6.6.2所述,访问是正确的。(此子句是指允许派生类访问超类的受保护成员的规则;第6.6.2节开始:
“对象的受保护成员或构造函数可以从仅通过以下代码声明的包外部访问:负责该对象的实现。” 然后对此进行详细说明。)

* 否则,如果将成员或构造函数声明为私有,则仅当访问发生在包含成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。

  • 否则,我们说存在默认访问权限,只有当在声明该类型的包中发生访问时才允许使用默认访问权限。


 类似资料:
  • 本文向大家介绍Java中受保护的访问说明符和默认的访问说明符有什么区别?,包括了Java中受保护的访问说明符和默认的访问说明符有什么区别?的使用技巧和注意事项,需要的朋友参考一下 受保护的 访问说明符是相同的封装内可见,并且还在子类中可见,而默认 为一个 包级别的访问specifie r和它可以在同一个包中可见。 受保护的访问说明符 受保护的 遗嘱在同一软件包中充当公共角色,而在软件包中充当私有角

  • 问题内容: 我刚开始读一本Java书籍,就纳闷了。如果未指定,则哪个访问说明符是默认的? 问题答案: 默认可见性称为“ package-private”(尽管您不能显式使用此属性),这意味着可以从该类所属的同一包内部访问该字段。 正如mdma指出的那样,接口成员的情况并非如此,其默认值为“ public”。

  • 问题内容: 在Java中, 访问说明符 和 访问修饰符 是一回事吗? 问题答案: “访问修饰符”是Java语言规范中的正式术语,并在Java语言规范中使用。“访问说明符”在Java API文档中 同义使用,但这是我第一次注意到这一点。最好坚持使用JLS术语。

  • 所以我在编译上面的代码时出现了明显的错误,但是错误是访问修饰符的非法组合,但是java文档http://docs.oracle.com/javase/tutorial/java/javao/accesscontrol.html说只有三个访问修饰符(public,private和protected),所以这些抽象的、最终的、public,private和protected是访问修饰符或访问说明符还是

  • 问题内容: 我想了解以下示例中的情况(通过包从子类外部访问受保护的成员)。 我知道对于包外部的类,子类只能通过继承才能看到受保护的成员。 有两个包:和。 : : : 可以理解,中的方法可以访问,因为受保护的成员只能通过继承来访问。 我的问题是,为什么是方法,通过在基准访问时,工作正常的方法 ,但 将无法正常工作 通过访问时的参考? 问题答案: 该类中的代码被允许通过type的引用访问受保护的成员。

  • 问题内容: 我在理解Java(或其背后的设计)中的受保护的访问修饰符时遇到了一些麻烦。我认为这意味着程序包访问和通过继承包含抽象成员的类的对象的访问。 我编写了以下示例代码。我看到,如果未注释,注释掉的行会产生编译错误。为什么我可以通过Second中的Second对象而不是Second中的First对象访问pro? 问题答案: 该网页链接@MadProgrammer给出了一个体面的解释: “ pr