日期:2014-05-20  浏览次数:20866 次

新手送分题
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 进去时 就不报错。 求解上面代码为何报错 !!!!

------解决方案--------------------
你的主函数是静态的 而你下面的类是非静态的 所以会报错 你只要将下面的类改为静态的就可以了

Java code
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!!!!");
 }
 }
}

------解决方案--------------------
修改方式1:修改main方法
Java code
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!!!!");
        }
    }

------解决方案--------------------
修改内部类的声明:
Java code
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!!!!");
        }
    }