一个java文件可以有多个类吗?

yes*_*aaj 101 java class

在Java文件中拥有多个类的目的是什么?我是Java新手.

编辑: 这可以通过在公共类中创建内部类来实现,对吧?

Sea*_*lly 124

是的,它可以.但是,每个文件只能有一个公共顶级.java,而公共顶级类必须与源文件具有相同的名称.

在一个源文件中包含多个类的目的是将相关的支持功能(内部数据结构,支持类等)与主公共类捆绑在一起.请注意,不执行此操作总是可以的 - 唯一的影响是代码的可读性(或不可读性).

  • 每个文件一个公共*顶级*类.每个文件可以有多个公共内部类. (24认同)
  • 它存在1.0兼容性(在嵌套类之前).这是语言中的一个大错误.使用它的最大优点是IDE具有无望的文件处理能力. (3认同)
  • 我认为如果您想将这些额外的类保持为私有,那么这样做是个好主意,以便以后可以完全更改它们,而不会破坏意外使用这些类的任何外部内容。 (2认同)

kgi*_*kis 17

如果要实现公共类,则必须在与该类同名的文件中实现它.单个文件可以包含一个公共类和一些私有类.如果类仅由公共类在内部使用,则此选项很有用.此外,公共类还可以包含内部类.

虽然在单个源文件中有一个或多个私有类是可以的,但我认为使用内部和匿名类更具可读性.例如,可以使用匿名类在公共类中定义Comparator类:

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };
Run Code Online (Sandbox Code Playgroud)

Comparator类通常需要一个单独的文件才能公开.这样它就与使用它的类捆绑在一起.


Alb*_*rto 10

是的,尽可能多的你!

但是,每个文件中只有一个"公共"类.


Uts*_*sav 6

.java文件称为编译单元.每个编译单元可以包含任意数量的顶级类和接口.如果没有公共顶级类型,则编译单元可以命名为任何名称.

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
Run Code Online (Sandbox Code Playgroud)

编译单元中只能有一个公共类/接口.cu必须与此公共顶级类型完全相同.

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
Run Code Online (Sandbox Code Playgroud)

关于主要方法的要点 - 第1部分

第2部分

(关于第2部分中课程数量及其访问级别的要点)


Mer*_*alp 6

是的,一个 .java 文件中可以有多个类。其中最多可以公开其中之一。其他的都是包私有的。它们不能是私有的或受保护的。如果是公共的,则该文件必须具有该类的名称。否则,可以为该文件指定任何内容作为其名称。

一个文件中有多个类意味着这些类位于同一个包中。因此,该包内但不在该文件中的任何其他类也可以使用这些类。此外,当导入该包时,导入类也可以使用它们。

要进行更详细的调查,您可以访问我的博客文章在这里


Con*_*ion 5

一般来说,每个文件应该有一个类。如果你这样组织,那么当你搜索一个类时,你知道你只需要搜索具有该名称的文件。

例外情况是当一个类最好使用一个或多个小辅助类来实现时。通常,当这些类存在于同一文件中时,代码最容易理解。例如,您可能需要一个小的“元组”包装类来在方法调用之间传递一些数据。另一个例子是实现 Runnable 或 Callable 的“任务”类。它们可能很小,最好与创建和调用它们的父类结合使用。


Gan*_*esh 5

是的,您可以创建多个公共类,但它必须是一个嵌套类。

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)