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

时间:2009-06-09 05:43:42

标签: java class

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

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

18 个答案:

答案 0 :(得分:122)

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

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

答案 1 :(得分:17)

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

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

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

    }
  };

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

答案 2 :(得分:10)

是的,尽可能多的人!

但是,每个文件中只有一个“公共”类。

答案 3 :(得分:5)

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

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

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

编译单元中只能有一个公共类/接口。 c.u.必须完全按照此公共顶级类型命名。

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

Important points about the main method - part 1

Part 2

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

答案 4 :(得分:4)

通常,每个文件应该有一个类。如果以这种方式组织,那么当您搜索类时,您知道只需要搜索具有该名称的文件。

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

答案 5 :(得分:4)

除了匿名内部类之外,另一个用途是实现公共接口(see this article)的私有内部类。外部类可以访问内部类的所有私有字段和方法。

这使您可以创建两个紧密耦合的类,例如模型及其视图,而不会暴露其中任何一个的实现。另一个例子是集合及其迭代器。

答案 6 :(得分:4)

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

public class first {

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

    public class demo1
    {

        public class demo2
        {

        }
    }
}

答案 7 :(得分:3)

是200%

示例:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

答案 8 :(得分:2)

是的它可以,但是任何包中只能有1个公共类,因为java编译器创建的.Class文件与Public类名同名,因此如果它们超过1个公共类就很难选择编译器应该是什么类文件的名称。

答案 9 :(得分:2)

我认为应该是“每个.java文件只能有一个非STATIC顶级公共类”。 不是吗?

答案 10 :(得分:1)

如果你想实现一个单例,这是一个在你的程序中运行的类,在整个应用程序的执行过程中只有一个实例在内存中,那么实现单例的一种方法是将一个私有静态类嵌套在里面公共课。然后内部私有类只在调用其访问私有实例的公共方法时才实例化。

查看此Wiki文章,

https://en.wikipedia.org/wiki/Singleton_pattern

这个概念需要一段时间来咀嚼。

答案 11 :(得分:1)

是的,你可以在.java文件中拥有多个类。最多其中一个可以公开。其他包是私有的。他们不能私密或受到保护。如果一个是公共的,则该文件必须具有该类的名称。否则,可以将该文件作为其名称赋予ANYTHING。

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

有关更详细的调查,您可以访问here中的博文。

答案 12 :(得分:1)

是的! .java文件只能包含一个公共类。

如果您希望将这两个类公开,则必须将它们放入两个.java文件中:A.java和B.java。

答案 13 :(得分:1)

是您可以在一个.Java文件中拥有多个类。但你已经将其中一个公之于众。并保存.java文件,其名称与公共类的名称相同。当您编译.java文件时,您将获得.java文件中定义的每个类的Separate .class文件。

除此之外,在一个.java文件中定义多个类的方法太多了。

  1. 使用内部类的概念。
  2. 使用匿名类的概念。

答案 14 :(得分:1)

在.java文件中,只能有一个公共顶级类,其名称与文件相同,但可能有几个公共内部类可以导出到每个人并访问外部类的字段/方法,例如AlertDialog.Builder中的AlertDialog(由'public static'修改)(由'public'修改)

答案 15 :(得分:1)

变化......一个这样的例子就是anonymous classes(你在使用事件监听器时会遇到很多这样的事情)。

答案 16 :(得分:0)

文件中只能有一个公共类顶级类。该公共类的类名应该是该文件的名称。它可以有许多公共内部类。

您可以在一个文件中包含多个类。文件中各种级别可见性的限制如下:

顶级课程
1公共班级 0私人班级 任意数量的默认/受保护类

内部班级:
具有任何可见性的任意数量的内部类(默认,私有,受保护,公共)

如果我错了,请纠正我。

答案 17 :(得分:0)

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