为什么我不能使用package-private(隐式)类作为java文件的顶级类?

时间:2015-07-26 13:52:20

标签: java class private access-modifiers

我是Java新手。也许问题有点天真。

例如,我有一个pkg1,其中有2个Java文件:f1.java和f2.java

作为标题,我觉得这是合理的 为f1使用package-private-top-level类, 然后使用公共顶级类为f2, 那么pkg1的外部仍然可以通过f2访问f1。

我甚至可以使用f3,f4 ......,它们都使用package-private类作为它们的顶级类。然后f2.java将成为pkg1中其余文件的包接口文件。

那么,为什么顶级课程必须公开呢?只是为了防止不必要的复杂性?

3 个答案:

答案 0 :(得分:4)

根据Oracle Java tutorial公开并不是顶级课程唯一可能的修饰符:

  

可以使用修饰符public声明一个类,在这种情况下,该类对所有类都可见。如果一个类没有修饰符(默认值,也称为包私有),它只在自己的包中可见

因此,基本上,如果您的设计要求保护某些类或包私有,则没有问题。

期限'顶级课程'实际上存在于Java以及术语“内部类”中。和嵌套类',我建议你看一下this page来清除一些java类层次结构的基础知识。

答案 1 :(得分:3)

  

为什么顶级课程必须公开?

Java中的“顶级”类只是一个不是嵌套类的类(另一个类中的类 - JLS§8)。它们不必是public

您可能正在考虑通过java工具运行的应用程序(并非所有应用程序都是!)。用作java工具入口点的类通常在示例中显示为public,但不是 要求公共静态void main方法接受String数组,但类本身不必是public

答案 2 :(得分:0)

顶级类应该是公共的,因为公共类可以在java Universe中的任何位置使用,但是如果你声明一个私有或受保护的类,那么它的唯一目的就是丢失,声明一个私有类将不允许这个类是对任何其他类可见并标记它是受保护的也将做同样的事情。它总是建议使类默认或公开。