java中默认访问说明符和受保护访问说明符的区别

新手上路,请多包涵

我正在尝试学习 java,当我通过访问说明符时,我有一个疑问。如果未指定默认访问说明符和 java 中的受保护访问说明符有什么区别?

原文由 Abhilash PS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 318
2 个回答

protected 说明符允许相关类的所有子类访问,无论它们位于什么包中,以及同一包中的其他代码。默认说明符允许同一包中的其他代码访问,但不允许位于不同包中的子类中的代码访问。请参阅 Java 语言规范第 6.6 节

编辑:根据 Michael Schmeißer 的要求(这样其他人就不必通读评论或通过链接找到它):接口的所有成员都是隐式公开的。事实上,为 public 以外的接口成员指定任何访问说明符是一个编译时错误(尽管没有访问说明符默认为公共访问)。这是 JLS 中针对类成员的完整规则集(有关包、顶级类和接口以及数组的规则,请参见上面的链接):

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

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

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

  • 否则,如果成员或构造函数被声明为受保护的,则只有在满足以下任一条件时才允许访问:

  • 对成员或构造函数的访问发生在包含声明受保护成员或构造函数的类的包内。

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

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

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

原文由 Ted Hopp 发布,翻译遵循 CC BY-SA 3.0 许可协议

本 Java 教程 可能对您有些用处。

 Modifier    | Class | Package | Subclass | World

public      |  Y    |    Y    |    Y     |   Y

protected   |  Y    |    Y    |    Y     |   N

no modifier |  Y    |    Y    |    N     |   N

private     |  Y    |    N    |    N     |   N

原文由 Coding Master 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题