package SpeakDemo;public class SpeakDemo { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog= new Dog();
Cat cat= new Cat();
Duck duck= new Duck();
dog.dospeak();
cat.dospeak();
duck.dospeak(); }
public class Dog{
public void dospeak(){
System.out.println("Wang Wang!!!!");
}
}
public class Cat{
public void dospeak(){
System.out.println("Miao Miao!!!!");
}
}
public class Duck{
public void dospeak(){
System.out.println("Ga Ga!!!!");
}
}
}
在主函数  new Dog(); new Cat(); new Duck(); 三处报错; 当我将下面三个函数 分成三个 与 SpeakDemo 并列的包,然后 import 进去时  就不报错。  求解上面代码为何报错   !!!!

解决方案 »

  1.   

    public class SpeakDemo
    { public static void main(String[] args)
    {
    // TODO Auto-generated method stub
    Dog dog = new Dog();
    Cat cat = new Cat();
    Duck duck = new Duck();

    dog.dospeak();
    cat.dospeak();
    duck.dospeak();
    }
    }
    class Dog
    {
    public void dospeak()
    {
    System.out.println("Wang Wang!!!!");
    }
    }class Cat
    {
    public void dospeak()
    {
    System.out.println("Miao Miao!!!!");
    }
    }class Duck
    {
    public void dospeak()
    {
    System.out.println("Ga Ga!!!!");
    }
    }
      

  2.   

    在一个文件里写多个class时,只能一个为public
      

  3.   

    你的主函数是静态的 而你下面的类是非静态的 所以会报错 你只要将下面的类改为静态的就可以了public class SpeakDemo { /**
     * @param args
     */
     public static void main(String[] args) {
     // TODO Auto-generated method stub
     Dog dog= new Dog();
     Cat cat= new Cat();
     Duck duck= new Duck();
     dog.dospeak();
     cat.dospeak();
     duck.dospeak(); }
     
     public static class Dog{
     public void dospeak(){
     System.out.println("Wang Wang!!!!");
     }
     }
     public static class Cat{
     public void dospeak(){
     System.out.println("Miao Miao!!!!");
     }
     }
     public static class Duck{
     public void dospeak(){
     System.out.println("Ga Ga!!!!");
     }
     }
    }
      

  4.   

    一个文件最多可以有1个public class
      

  5.   

    修改方式1:修改main方法
    public static void main(String[] args) {
    /*
     * 你这种定义类的方式,是非静态内部类,它的存在依靠外部类来定义
     * 关于它的声明,是不能使用new关键字的,需要使用“外部类对象.new 内部类()”的方式
     * 关于更多内部类的知识,你可以自行查看资料
     */
    // Dog dog= new Dog();
    // Cat cat= new Cat();
    // Duck duck= new Duck();
    // 提供给你一种解决的方法
    SpeakDemo sd = new SpeakDemo();
    Dog dog = sd.new Dog();
    Cat cat = sd.new Cat();
    Duck duck = sd.new Duck();

    dog.dospeak();
    cat.dospeak();
    duck.dospeak(); } public class Dog {
    public void dospeak() {
    System.out.println("Wang Wang!!!!");
    }
    } public class Cat {
    public void dospeak() {
    System.out.println("Miao Miao!!!!");
    }
    } public class Duck {
    public void dospeak() {
    System.out.println("Ga Ga!!!!");
    }
    }
      

  6.   

    修改内部类的声明:
    public static void main(String[] args) {
    Dog dog= new Dog();
    Cat cat= new Cat();
    Duck duck= new Duck();

    dog.dospeak();
    cat.dospeak();
    duck.dospeak(); } /*
     * 将所有的内部类定义为静态内部类 
     *      使它们不依靠对象存在,而属于这个类
     */
    static public class Dog {
    public void dospeak() {
    System.out.println("Wang Wang!!!!");
    }
    } static public class Cat {
    public void dospeak() {
    System.out.println("Miao Miao!!!!");
    }
    } static public class Duck {
    public void dospeak() {
    System.out.println("Ga Ga!!!!");
    }
    }
      

  7.   

    这是java的规范问题。
    Java源文件中可以有多个类,但只能有一个public类,并且public的类名必须与文件名保持一致
      

  8.   

    public的类名必须与文件名保持一致