我对Java很新,每当我们在学校编写程序时,我们将每个类放在一个单独的java文件中,但我不记得为什么会这样(如果有原因的话).现在我回到我的笔记,并试图"理解"它是如何工作的.
这是必要的,为什么?此外,是否应该存储文件的位置 - 例如在同一目录中?
例如,如果我们有一个类'Vehicle'和一个'Car'类'扩展'Vehicle',我们是否需要分别将'Vehicle'和'Car'保存在java文件'Vehicle.java'和'Car.java'中,或者可以将这两个类保存在(比如)'Test.java'中吗?
复制免责声明:我的问题与此不同,因为我的问题是否可以将多个类放在一个.java文件中; 我特别感兴趣的解释,即为什么它/不可能.我对调用该方法不感兴趣(链接的问题只是说'它是必要的,现在它叫什么?'):我的问题比这更基本.
可以在一个.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.baz和bar.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)