package test;
abstract class Animall{
String name="小小";
int height=30;
public abstract void eat();{
System.out.println("动物的特征");

}
}
class Cat extends Animall{
public  void eat(){
System.out.println("猫喜欢吃小鱼");
}
}
public class dog extends Animall{
public void eat(){
System.out.println("狗喜欢吃骨头");
}
}
public class Animal {
public static void main(String[] args) {
Animall My = new Cat();
My.eat();
Animall Mydog = new dog();
Mydog.eat();
}}为什么我在 Cat类和dog类前面加上public运行就会出现这样的错误呢?
Exception in thread "main" java.lang.Error: 无法解析的编译问题:
公用类型 Cat 必须在它自己的文件中定义
公用类型 dog 必须在它自己的文件中定义 at test.Cat.<init>(Animal.java:10)
at test.Animal.main(Animal.java:22)

解决方案 »

  1.   

    一个java文件中只能有一个public类 
    并且文件名和public类名相同
      

  2.   

    一个java文件中只能有一个public类
    并且文件名和public类名相同--java就是这样归定的,至于为什么这么规定,我也不知道,没人告诉我啊。
      

  3.   

    不能算是java的规定吧。可以当规范记忆。
    gosling的the Java Programming language里面说,大部分虚拟机会有这个要求。 
      

  4.   

    public abstract void eat();{ 
    System.out.println("动物的特征"); } 这里也有问题,抽象方法不需要加{},应该是
    public abstract void eat();
    后面的就不要了。
      

  5.   

    一个java文件中只能有一个public类 
    并且文件名和public类名相同jvm 这么要求的,java的规范