其实是这样的,在java中规定,以.java为扩展名的java文件里可以包括多个class,但是只允许有一个public class。 如://abc.java
class abc1 {}public class {}

解决方案 »

  1.   

    当你声明成public class时不能通过编译。但不声明public可以编译,但你能指望它能用吗?
      

  2.   

    例如:
    Test.java中:
    public class Test1 {

    不能通过编译

    class Test1 {

    可以
    所以,结论是public class的名字要和文件名相同。
      

  3.   

    Test.java:
    这样是可以的
    public class Test{
    }
    class Test1{
    }
      

  4.   

    其实是这样的:
    可以有这样的java程序:
    lib.java:
    class lib1{
      void a(){}
    }Test.java
    public class Test{
      void b(){
        (new lib1()).a();
      }
    }这样的程序是可以运行。在这里public class的名字要和文件名相同,但包内可用的class的名字可以和文件名不相同,但如果这样的话就要付出一定的代价:当直接javac Test.java时java不能自动解析lib1的所在,所以你必须手工编译lib.java,然后再javac Test.java。但若类名跟文件名相同时,java就可以自动根据文件名找到类,所以你只要编译public class就可以了。所以,结论是public class的名字要和文件名相同。package class的名字可以和文件名不相同,但最好相同,至于protected class and private class由于你不可能在一个文件里仅有protected class and private class所以它们的名字不可能和文件名相同。