我已经用Java编程了一段时间,我才意识到protected
访问修饰符也允许在相同的包中访问成员。所以这里是情况和问题:
我有一个具有protected
方法的类,以及一个使用Mockito来测试该方法的测试类。这两个类位于不同的文件夹中( src 和 test ),但它们的包名是相同的!有趣的是,我可以在测试类中调用受保护的方法!我想知道它是如何可能的?因为他们的包名是一样的吗?在这种情况下,protected
修饰符允许非常广泛的访问!
答案 0 :(得分:1)
如果包名相同,则这两个类在同一个包中 - 它就这么简单。它们是从不同的源目录构建的这一事实无关紧要 - 标识包的唯一事物是它的完全限定名称。
答案 1 :(得分:1)
包名称表示编译器将放置.class
文件的目录结构。如果将编译具有相同包名但包不同(不知道如何)的两个java文件,它们将被放置在同一目录中。
可以访问受保护的字段。
简而言之,您不能为不同的包提供相同的包名,java会将它们视为同一个包。