java 9模块中没有访问说明符和public之间有什么区别?

时间:2017-11-15 06:57:11

标签: java oop java-9 access-specifier

从java 9开始,公共访问仅限于它自己的模块。这是否意味着public的行为类似于package protected(无访问说明符)?有人可以澄清一下吗?

2 个答案:

答案 0 :(得分:4)

Module system的主要目标之一是提供:

  

强封装 ,允许组件声明其中哪些公共类型可供其他组件访问,哪些是   不

要添加到#accessibility方面 -

  

Java编译器和虚拟机考虑中的公共类型   在一个模块中打包,可以通过其他模块中的代码访问   只有当第一个模块可被第二个模块读取时,才能   上面定义的意义,第一个模块导出该包

因此,为了从另一个模块访问包的公共类型,被访问的模块需要export该包以使其可读。

但是,对于模块系统中的所有类型的模块(例如自动模块),这不一定是真的。

  

这是否意味着公共行为像保护包(无法访问)   说明者??

,公共类型应该可以被相同模块中的不同包访问,以及何时(如果)导出,该包会公开对公共类型的访问通过其他模块的其他包。

答案 1 :(得分:3)

package个元素只能在包中访问。模块中的其他软件包无法访问这些元素。

public没有exports,模块中的任何其他包都可以访问。

换句话说:

  • package个元素是 package-local
  • 没有public
  • exports 本地模块

因此,没有public的{​​{1}}比exports宽。