【问题标题】:Java protected modifier accessible in another package having the same package name [duplicate]Java protected修饰符可在具有相同包名的另一个包中访问[重复]
【发布时间】:2014-10-14 19:37:45
【问题描述】:

我已经用 Java 编程了一段时间,我刚刚意识到 protected 访问修饰符允许在同一个包中访问成员。所以这是情况和问题:

我有一个具有protected 方法的类,以及一个使用 Mockito 来存根该方法的测试类。这两个类位于不同的文件夹中(一个src 和一个test),但是它们的包名是一样的!有趣的是,我可以在测试类中调用受保护的方法!我想知道这怎么可能?因为他们的包名是一样的?在这种情况下,protected 修饰符确实允许非常广泛的访问!

【问题讨论】:

  • 最后srctest 的所有类都进入bin 目标文件夹。看看那里的课程。
  • 类位于 srctest 中并不重要。在运行时,所有具有相同包名的类都将被视为来自同一个包的类。尝试更改测试类的包,会发现无法访问protected方法。

标签: java package protected


【解决方案1】:

如果包名相同,则两个类在同一个包中——就这么简单。它们是从不同的源目录构建的这一事实是无关紧要的 - 唯一 标识一个包的东西是它的完全限定名称。

【讨论】:

    【解决方案2】:

    包名表示编译器将放置.class文件的目录结构。如果编译两个包名相同但包不同的java文件(不知道怎么编译),它们会放在同一个目录下。

    并且受保护的字段将可以访问。

    简而言之,不同的包不能有相同的包名,java会将它们视为同一个包。

    【讨论】:

    • 看了你们的回答,我想我现在明白了。仅供参考,正如我在问题中所说,我有一个 src 文件夹和一个 test 文件夹,这两个文件夹中的一些包具有完全相同的名称,这就是为什么我有两个同名的包。它们可以在文件系统中分开,我只是不知道它们会被编译成一个包。还是谢谢!
    • 哦..我错过了,我的错!!!
    猜你喜欢
    • 2010-10-28
    • 2016-06-15
    • 2020-07-14
    • 2013-12-01
    • 2021-08-25
    • 2013-07-29
    • 1970-01-01
    • 2013-04-11
    • 2012-10-29
    相关资源
    最近更新 更多