为什么我不能使用包私有(隐式)class 作为 java 文件的顶级 class?
Why cannot I use a package-private (implicit) class as the top-level class of a java file?
我是 Java 的新手。可能问题有点幼稚
比如我有一个pkg1,里面有2个Java个文件:f1.java和f2.java
如题,我觉得很有道理
为 f1 使用 package-private-top-level class,
然后对 f2 使用 public-top-level class,
那么 pkg1 的外部仍然可以通过 f2 访问 f1。
我什至可以有 f3,f4……,它们都使用 package-private class 作为它们的顶级 class。然后 f2.java 将成为 pkg1 中其余文件的包接口文件。
那么,为什么顶级 class 必须是 public?只是为了避免不必要的复杂性?
why is the fact that a top-level class must be public?
A "top level" class in Java 只是一个 class 而不是嵌套的 class (一个 class 在另一个里面class — JLS§8)。他们不需要 public
.
您可能会想到通过 java
工具 运行 的应用程序(并非所有应用程序都是!)。 class 旨在用作 java
工具的入口点,在示例中通常显示为 public
,但 不是 必需的成为。它 是 需要一个 public static void main
方法接受一个 String
数组,但是 class 本身没有成为 public
.
根据 Oracle Java tutorial,public 不是顶级 class 的唯一可能修饰符:
A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package
因此,基本上,如果您的设计要求,使某些 classes 受保护或包私有是没有问题的。
术语'top-level class'实际上存在于Java以及术语'inner class'和'nested class',建议您查看this page以清除java class 层次结构的一些基础知识。
顶级 class 应该是 public 因为 public class 可以在 java 宇宙的任何地方使用,但是如果你声明class private 或 protected 那么它的唯一目的就失去了声明 class private 将不允许这个 class 对任何其他 class 可见并且标记它是受保护的也会做同样的事情 thing.Its 始终建议将 class 设置为默认值或 public.
我是 Java 的新手。可能问题有点幼稚
比如我有一个pkg1,里面有2个Java个文件:f1.java和f2.java
如题,我觉得很有道理 为 f1 使用 package-private-top-level class, 然后对 f2 使用 public-top-level class, 那么 pkg1 的外部仍然可以通过 f2 访问 f1。
我什至可以有 f3,f4……,它们都使用 package-private class 作为它们的顶级 class。然后 f2.java 将成为 pkg1 中其余文件的包接口文件。
那么,为什么顶级 class 必须是 public?只是为了避免不必要的复杂性?
why is the fact that a top-level class must be public?
A "top level" class in Java 只是一个 class 而不是嵌套的 class (一个 class 在另一个里面class — JLS§8)。他们不需要 public
.
您可能会想到通过 java
工具 运行 的应用程序(并非所有应用程序都是!)。 class 旨在用作 java
工具的入口点,在示例中通常显示为 public
,但 不是 必需的成为。它 是 需要一个 public static void main
方法接受一个 String
数组,但是 class 本身没有成为 public
.
根据 Oracle Java tutorial,public 不是顶级 class 的唯一可能修饰符:
A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package
因此,基本上,如果您的设计要求,使某些 classes 受保护或包私有是没有问题的。
术语'top-level class'实际上存在于Java以及术语'inner class'和'nested class',建议您查看this page以清除java class 层次结构的一些基础知识。
顶级 class 应该是 public 因为 public class 可以在 java 宇宙的任何地方使用,但是如果你声明class private 或 protected 那么它的唯一目的就失去了声明 class private 将不允许这个 class 对任何其他 class 可见并且标记它是受保护的也会做同样的事情 thing.Its 始终建议将 class 设置为默认值或 public.