为什么我不能使用包私有(隐式)类作为java文件的顶级类?

为什么我不能使用包私有(隐式)类作为java文件的顶级类?,java,class,private,access-modifiers,Java,Class,Private,Access Modifiers,我是Java新手。也许这个问题有点天真 例如,我有一个pkg1,其中有两个Java文件:f1.Java和f2.Java 作为标题,我觉得它是合理的 要为f1使用包专用顶级类, 然后对f2使用公共顶级类, 那么pkg1的外部仍然可以通过f2访问f1 我甚至可以有f3,f4。。。,它们都使用包私有类作为它们的顶级类。然后f2.java将成为pkg1中其余文件的包接口文件 那么,为什么顶级类必须是公共的呢?只是为了避免不必要的复杂性 为什么顶级类必须是公共的 Java中的“顶级”类只是一个不是嵌套类(

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

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

作为标题,我觉得它是合理的 要为f1使用包专用顶级类, 然后对f2使用公共顶级类, 那么pkg1的外部仍然可以通过f2访问f1

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


那么,为什么顶级类必须是公共的呢?只是为了避免不必要的复杂性

为什么顶级类必须是公共的

Java中的“顶级”类只是一个不是嵌套类(另一个类中的类)的类。它们不需要是公共的

您可能会想到通过
java
工具运行的应用程序(并非所有都是!)。在示例中,打算用作
java
工具入口点的类通常显示为
public
,但并不要求这样。它需要有一个公共静态void
main
方法来接受
String
数组,但类本身不必是
public
,因为,public不是顶级类唯一可能的修饰符:

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

因此,基本上,如果您的设计要求,将某些类设置为受保护或包私有是没有问题的


Java中实际上存在术语“顶级类”以及术语“内部类”和“嵌套类”,我建议您了解一下Java类层次结构的一些基础知识。

顶级类应该是公共的,因为公共类可以在Java世界的任何地方使用,但是,如果您将一个类声明为私有或受保护,那么它的唯一用途就失去了。声明一个类为私有将不允许该类对任何其他类可见,并且将其标记为受保护也将做同样的事情。始终建议将一个类设为默认或公共。

“那么,为什么顶级类必须是公共的呢?”不一定是这样。请展示一些代码,而不是描述它,并告诉我们您遇到了什么错误…Thx all,我只是在尝试之前问了这个问题,因为我看到很多问题说“一个java文件必须只包含一个与该文件同名的公共类”。我认为这是理所当然的。这意味着它最多只能包含一个公共类。没错!这正是我想要的。很高兴它有帮助:)如果你这里没有更多的问题,如果你把这个答案标记为已接受,我将不胜感激,否则请随意提问,我发现了这个链接:,它可能有助于Hanks@JonSkeet,已修复。