为什么每个文件只有一个类

时间:2010-11-10 14:04:52

标签: java

仍然来自C ++我发现创建许多小助手类和对象很麻烦。主要是因为每个班级必须有一个文件。我基本上有这样一个类:

public class mySimpleClass {
    public float[] numbers = new float[ 4 ];
}

然后我有这个课程:

public class myNotSoSimpleClass {
    private mySimpleClass;
    .
    .
    .
}

第二类不是那么简单就可以拥有自己的文件了。但是,简单的类连接到不那么简单的类,如果不必在自己的文件中包含这几行代码,那将是非常好的。

总而言之,这就是人们可以用C ++做的事情:

public class myNotSoSimpleClass {
    private struct mySimpleClass {
        float numbers[ 4 ];
    } myStruct;
    .
    .
    .
}

是否可以在另一个类或同一个文件中嵌入/使用一个类?如果我可以将这两个类设置为一个文件,我会发现使用大型项目​​更容易。或者Java是每个文件严格一个类,就是这样,语言?

9 个答案:

答案 0 :(得分:16)

您可以在同一个文件中包含多个类,但只有一个类可以是public

Java: Multiple class declarations in one file

答案 1 :(得分:15)

可以在另一个类中包含一个类。在Java中,它被称为inner class

答案 2 :(得分:10)

正如其他几位人士指出的那样,您可以在一个文件中包含任意数量的非公开类。

要回答“为什么”,一个可能的因素是它使您的课程很容易找到。如果我在程序中看到Foobar类的引用,我立即知道它必须与当前类在同一个文件中,或者它必须位于名为Foobar.java的文件中。我可以检查导入以查看它所在的目录。

当我使用C或C ++程序时,我经常发现自己不得不进行Windows文件搜索或Linux grep来查找类的源代码。

当我编写非常小的程序时,我经常将所有类放在一个文件中。但是,如果它将超过几千行,那么打破它就更容易管理。

当我有一个仅由另一个类使用的类时,我经常将它放在同一个文件中。通常这意味着一个只存在暂时保存一些小数据的类,比如我需要一个需要多个字段的数组或列表。

答案 3 :(得分:6)

限制是每个文件只能有一个顶级公共类(尽管你可以拥有嵌套的公共类)。正如人们所提到的,你可以在该类中拥有内部/嵌套类。

另一件未提及的事情是,您可以在同一个文件中拥有另一个顶级类,只要它是包私有的(仅在包中可见)。 package-private类是声明没有访问修饰符的类。

这是有关Java的一章(值得一读)。 http://books.google.co.uk/books?id=ka2VUBqHiWkC&lpg=PA67&ots=yXKoLnv2TX&dq=Minimize%20the%20accessibility%20of%20classes%20and%20members&pg=PA67#v=onepage&q&f=false

答案 4 :(得分:4)

规则是每个文件的一个顶级公共类。允许使用内部类,私有类和其他一些东西

答案 5 :(得分:3)

Java允许您创建内部类。也就是说,另一个类中的类。那就是你应该把你的帮助类放在哪里。另一方面,我感受到你的痛苦。作为一名C ++程序员,我自己有时会觉得Java会强迫你使用样板。

答案 6 :(得分:3)

是的,您可以将一个类嵌套在另一个类中。

与此处的许多答案相反,公众可见度没有限制。

嵌套类包括:

  • 静态嵌套类。
  • 内部类,它具有指向包含类的实例的隐式指针,并且允许访问其私有部分。
  • 匿名内部类,可以在包含类的方法中创建,没有名称。例如,对于短事件听众来说,这些都很方便。

Oracle tutorial.

中提供了更多详细信息

答案 7 :(得分:2)

在Java中,无法将两个 public 顶级类放入同一个文件中,但此限制不适用于私有/内部类。所以你可以有类似的东西:

public class MyNotSoSimpleClass {
    private MySimpleClass mySimpleClass = new MySimpleClass();

    private class MySimpleClass {
        public float numbers[4];
        ...
    }
....

}

答案 8 :(得分:0)

在Java中有一种称为嵌套类的东西,请阅读更多about it here