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

Esp*_*pen 15 java

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

public class mySimpleClass {
    public float[] numbers = new float[ 4 ];
}
Run Code Online (Sandbox Code Playgroud)

然后我有这个课:

public class myNotSoSimpleClass {
    private mySimpleClass;
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

第二类不是那么简单就可以拥有自己的文件了.但是,简单的类连接到不那么简单的类,并且不必在自己的文件中包含那么少行代码是非常好的.

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

public class myNotSoSimpleClass {
    private struct mySimpleClass {
        float numbers[ 4 ];
    } myStruct;
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 16

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

Java:一个文件中的多个类声明

  • 他根本不是指内部课程,而是指其他顶级课程. (6认同)
  • @Andy:不,"其中只有一个可以公开"是完全正确的.此外,我无法理解为什么这是低估的. (2认同)

Dav*_*and 15

可以在另一个类中包含一个类.在Java中,它被称为内部类


Jay*_*Jay 10

正如其他几个人所指出的,您可以在一个文件中包含任意数量的非公共类.

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

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

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

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


Sin*_*njo 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

  • 不正确.嵌套类可以是公共的. (2认同)