不同的类需要在不同的java文件中吗?

Szm*_*pie -3 java

我对Java很新,每当我们在学校编写程序时,我们将每个类放在一个单独的java文件中,但我不记得为什么会这样(如果有原因的话).现在我回到我的笔记,并试图"理解"它是如何工作的.

这是必要的,为什么?此外,是否应该存储文件的位置 - 例如在同一目录中?

例如,如果我们有一个类'Vehicle'和一个'Car'类'扩展'Vehicle',我们是否需要分别将'Vehicle'和'Car'保存在java文件'Vehicle.java'和'Car.java'中,或者可以将这两个类保存在(比如)'Test.java'中吗?

复制免责声明:我的问题与不同,因为我的问题是否可以将多个类放在一个.java文件中; 我特别感兴趣的解释,即为什么它/不可能.我对调用该方法不感兴趣(链接的问题只是说'它必要的,现在它叫什么?'):我的问题比这更基本.

dor*_*ack 5

可以在一个.java文件中放置多个类.但是,这是个坏主意.原因如下:

package foo.bar;

public class Foo { }

public class Bar { }
Run Code Online (Sandbox Code Playgroud)

包含上述代码的源文件将无法编译,因为每个.java文件只能包含一个公共class/ interface/ enum(顺便说一句,这些被称为"类型").因此,您必须执行此操作以将它们保存在同一文件中:

package foo.bar;

public class Foo { }

class Bar { } // Not public
Run Code Online (Sandbox Code Playgroud)

或这个:

package foo.bar;

class Foo { } // Not public

public class Bar { }
Run Code Online (Sandbox Code Playgroud)

现在出现了一个缺点:如果非公共类型包含对所有内容都有用的东西(例如在正态分布上生成随机数的方法),那么不在包中的任何东西都不能访问它foo.bar!

此外,管理小型源文件更容易.


此外,是否应该存储文件的位置 - 例如在同一目录中

是的 - 这取决于包名称.例如,包foo.bar,foo.baz,foo.qux,bar.foo,bar.bazbar.qux看起来像一个普通的源文件夹(我们称之为的这些子文件夹src):

./src/
L___ ./src/foo/
|    L__ ./src/foo/bar/
|    L__ ./src/foo/baz/
|    L__ ./src/foo/qux/
L___ ./src/bar/
|    L__ ./src/bar/foo/
|    L__ ./src/bar/baz/
|    L__ ./src/bar/qux/
Run Code Online (Sandbox Code Playgroud)

当你应用这个逻辑java.lang.Object(假设仍然调用源文件夹src),你会得到这个:

./src/
L___ ./src/java/
|    L___ ./src/java/lang/
|    |    L___ ./src/java/lang/Object.java
Run Code Online (Sandbox Code Playgroud)