一个.java源文件可以包括多个类,但是只能有一个类是public类型的,且必须和文件名一致。
但是为什么这样呢?
这是编译器规定的:
1、因为每个.java源文件实质上是一个编译单元(文件),而每个编译单元都需要一个入口,可以说是一个调用的入口。
2、public类名必须和文件名一致,不然编译器就会报错;
3、如果.java源文件内,没有public类,那么可以存在多个类,并且类名和文件名无关,文件名可以随便写。
可以这么理解:
每个.java源文件,会被编译成一个个.class文件,如果一个.java源文件存在多个public类,那么就相当于生成了入口,调用的时候,将会不知道去调用哪个入口,所以是不被允许的;
而如果文件名和public类名不一致,生成的调用接口对应不上,所以也不被允许;
最后,如果一个.java源文件含有多个非public类,编译完没有入口,也就没法调用,虽然编译是没问题的,但不知其作用。