【问题标题】:What is the relationship between a package and its subpackage in Java? [duplicate]Java中的包和它的子包之间有什么关系? [复制]
【发布时间】:2012-11-09 01:08:11
【问题描述】:

可能重复:
Java: Subpackage visiblity?

这是问题Java: Subpackage visiblity? 的延续。询问的原因是为了引起更广泛社区的关注。

问题 odp.proj 和 odp.proj.subpackage 这两个包之间有什么关系吗?

有人试图回答它here,但未能描述它。

【问题讨论】:

  • 无子包。一个/组类属于一个包。
  • @Perception:OP 已经提供了有问题的链接。
  • Java 与此最接近的是;一个类可以查看/访问同一类文件中任何其他类的private 成员,即使它们没有嵌套。
  • @Nambari - 是的,我知道,但除非我在他的问题中遗漏了一些东西,否则它完全相同。仅仅因为他把它联系起来并不能消除这个事实。
  • 我认为这不是重复的——“子包”在JLS 中定义,它与可见性无关(这是潜在的重复问题所问的问题)。辅助包、类和接口是三种包成员类型。子包的语言效果只有一种:包内的类或接口不能与包的子包同名。此外,子包“旨在方便以传统方式组织相关包”。

标签: java package


【解决方案1】:

不,从 Java 语言的角度来看,odp.projodp.proj.subpackage 之间没有关系。

对于代码,odp.proj.subpackage 将驻留在 odp.proj 的子目录中,并且一些工具和 IDE 可能会将它们组合在一个 UI 中,但对于语言访问控制或其他语言功能没有关系。

Java 没有子包的概念,因此 odp.proj.subpackage 和 odp.proj 与任何其他不同命名的包一样彼此不同。

【讨论】:

    【解决方案2】:

    简答

    您正在寻找的确切功能不存在。

    长答案

    They considered doing it for Java 1.7, but the case is dormant.

    就实际情况而言,odp.projodp.proj.subpackage 除了目录结构、protected 关键字和 import odp.proj.*; 之类的东西之外,根本没有任何关系——除了该语句没有得到任何来自odp.proj.subpackage的课程

    实现您想要的内容的一种方法是针对您想要公开的内容发布 API 规范,并将其余部分保留为未记录或私人记录的内容。您甚至可以使用 ProGuard 之类的东西来混淆每个版本中的私有类。

    【讨论】:

      【解决方案3】:

      Java 没有子包的概念。

      除了组织之外,包还使用protected 和“package”(空白)修饰符定义方法/字段的可访问性,允许同类和同包访问。但是,这种同包访问也不包括子包类。

      【讨论】:

      • 另外,不指定修饰符允许包内访问。事实上,protected 实际上比未指定的访问修饰符可见,因为它还允许子类除了在包内访问之外访问成员。
      【解决方案4】:

      通常,如果包名称包含“内部”一词,则用户不应直接使用它,因为无法保证这些包将出现在未来的版本中。这只是一个命名约定,但仍然可以作为一种解决方法。

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 2011-12-12
        • 2010-09-14
        • 1970-01-01
        • 2014-08-14
        • 2011-08-23
        • 1970-01-01
        • 2011-04-28
        • 2015-06-19
        相关资源
        最近更新 更多