从java 9开始,公共访问仅限于它自己的模块。这是否意味着public
的行为类似于package protected
(无访问说明符)?有人可以澄清一下吗?
答案 0 :(得分:4)
Module system的主要目标之一是提供:
强封装 ,允许组件声明其中哪些公共类型可供其他组件访问,哪些是 不
要添加到#accessibility方面 -
Java编译器和虚拟机考虑中的公共类型 在一个模块中打包,可以通过其他模块中的代码访问 只有当第一个模块可被第二个模块读取时,才能 上面定义的意义,第一个模块导出该包
因此,为了从另一个模块访问包的公共类型,被访问的模块需要export
该包以使其可读。
但是,对于模块系统中的所有类型的模块(例如自动模块),这不一定是真的。
这是否意味着公共行为像保护包(无法访问) 说明者??
否 ,公共类型应该可以被相同模块中的不同包访问,以及何时(如果)导出,该包会公开对公共类型的访问通过其他模块的其他包。
答案 1 :(得分:3)
package
个元素只能在包中访问。模块中的其他软件包无法访问这些元素。
public
没有exports
,模块中的任何其他包都可以访问。
换句话说:
package
个元素是 package-local public
的exports
本地模块。因此,没有public
的{{1}}比exports
宽。