在现实项目中基本不会遇到这种情况,除非程序员是豆比请来的,做这种骚操作。
虽然Java编译器让你在单个源文件中定义多个顶层类,但是这么做没有任何益处。危险性来自这个事实:在单个源文件中定义多个顶层类,使得为一个类提供多个定义变得可能。使用哪个定义,受传递到编译器的源文件顺序的影响。
为了使得这具体些,考虑如下源文件,它仅仅包含了一个Main类,这个类引用另外两个顶层类(Utensil和Dessert)的成员:
public class Main {
public static void main(String[] args) {
System.out.println(Utensil.NAME + Dessert.NAME);
}
}
现在假设你在命名为Utensil.java的单个源文件中,同时定义Utensil和Dessert:
// 同个文件中定义了两个类。永远不要这么做!
class Utensil {
static final String NAME = "pan";
}
class Dessert {
static final String NAME = "cake";
}
当然,主程序打印了pancake。
现在假设你恰巧在命名为Dessert.java的另外一个源文件中,定义了相同的两个类:
// 同个文件中定义了两个类。永远不要这么做!
class Utensil {
static final String NAME = "pot";
}
class Dessert {
static final String NAME = "pie";
}