我正在阅读一本java书,并出现在以下段落中:
import和package语句适用于源中的所有类 代码文件。换句话说,没有办法声明多个类 在一个文件中,让它们在不同的包中或使用不同的 进口。
我在理解这一段时遇到困难,可以请别人解释一下它背后的想法吗?
答案 0 :(得分:3)
您可以在单个文件中声明多个类,例如,以下内容将定义类Foo
,Bar
和Baz
:
package com.example;
import java.util.List;
import java.util.ArrayList;
public class Foo {
public class Bar {}
}
class Baz {}
每个文件只能有一个顶级公共类,在本例中为Foo
。
注意包声明;这适用于文件中的所有类;所有课程都在' com.example
'命名空间 - 您不能在Foo
' com.example
'以及Bar
' com.example.something
'
导入适用于此文件中的所有类;您不仅可以将导入提供给Baz
(或文件中声明的类的任何子集)
您可能想知道在Bar
类中声明的Foo
正在做什么;这是一个内部类 - 关于内部类的(有点稀疏)oracle教程是here
答案 1 :(得分:3)
通常,单个源代码文件包含单个公共类定义:
package com.example;
public class FirstClass {
}
可以在文件中将多个类定义为顶级,但只有一个可以是公共的:
package com.example;
public class FirstClass {
}
class SecondClass {
}
这是你的段落引用的情况:文件中声明的所有顶级类都在同一个包中:在这种情况下为com.example
。
类也可以在各种内部范围中定义,例如在类中作为静态或非静态,或在方法中
package com.example;
public class Outer {
static class StaticInner { }
class Inner {}
void method(){
class MethodInner {}
}
}
这些也有效地存在于同一个包中,尽管它们的范围也包含在封闭类中,而不仅仅是包级别的类。
有关如何构造和访问内部类以及它们如何命名的各种定义,但这似乎超出了您最初的问题的范围。