package world;class a {
public void method(){
System.out.println("hello world");
}
public void good(){
System.out.println("good");
}
}
class b extends a{  //子类的方法覆盖父类的方法

public void method(){
//super.method();
System.out.println("你好,世界");
}
}
public class A{
public static void main(String args[]){
b go = new b();
go.method();
go.good();
}
}程序没错啊,但怎么运行不了呢??得不到想要的结果??
控制台中显示如下信息:Exception in thread "main" java.lang.NoClassDefFoundError: world/a (wrong name: world/A)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at world.A.main(A.java:22)请大牛们分析下   谢谢

解决方案 »

  1.   


    package world;class a {
       public void method(){
           System.out.println("hello world");
       }
        public void good(){
            System.out.println("good");
        }
        }
    class b extends a{  //子类的方法覆盖父类的方法
        
        public void method(){
            //super.method();
            System.out.println("你好,世界");
        }
    }
    public class C{
        public static void main(String args[]){
    a aaA = new a();
            b go = new b();
            go.method();
            go.good();
        }
    }
    改改类名 就可以运行了 
      

  2.   

    windows 操作系统 是无法区分文件名的大小写的
    你可以在c:\ 下建一个文件A.class 但你再一次建一个文件a.class 时
    它会提示“指定的文件名与现有的文件名重名,请指定另一个文件名”
    所以当你在编译时是没办法同时生成A.class和a.class和b.class 除非将来有一天JVM的权限胜过windows操作系统
    你可以使用内部类解决文件名冲突的问题 类似下面的写法 此时同时生成 A.class A$b.class A$a.class 
    package world;public class A {
        public static void main(String args[]) {
    A c = new A();
    a a = c.new a();
    b go = c.new b();
    go.method();
    go.good();
        }    class a {
    public void method() {
        System.out.println("hello world");
    } public void good() {
        System.out.println("good");
    }
        }    class b extends a { // 子类的方法覆盖父类的方法 public void method() {
        // super.method();
        System.out.println("你好,世界");
    }
        }}
      

  3.   

    public class A {
        public static void main(String args[]) {
        A c = new A();
        a a = c.new a();
        b go = c.new b();
        go.method();
        go.good();
        }    class a {
        public void method() {
            System.out.println("hello world");
        }    public void good() {
            System.out.println("good");
        }
        }    class b extends a { // 子类的方法覆盖父类的方法    public void method() {
            // super.method();
            System.out.println("你好,世界");
        }
        }}
      

  4.   

    主要是你的类名字有问题,不符合java语言的命名规则,类名应该是大写,要是英文单词的话,首字母必须是大写,所以才会出错的,就是这两句的问题class a ,和class b extends a{  //子类的方法覆盖父类的方法
    把a,b改为大写的字母就行了。我已经帮你改过了,可以运行了。
    修改如下:
    package world;class D {//就是这出问题的,类名改为大写的字母
        public void method(){
            System.out.println("hello world");
        }
        public void good(){
            System.out.println("good");
        }
        }
    class B extends D{  //子类的方法覆盖父类的方法,//类名改为大写的字母    
        public void method(){
            //super.method();
            System.out.println("你好,世界");
        }
    }
    public class A{
        public static void main(String args[]){
            b go = new b();
            go.method();
            go.good();
        }
    }
      

  5.   

    哦,不好意思,我没有复制我的代码,回复的时候是复制你的代码在上面改的,忘了下面主方法里面也的改,下面是完成的正确的代码,可以运行,没有错误的
    package world;class D {
        public void method(){
            System.out.println("hello world");
        }
        public void good(){
            System.out.println("good");
        }
        }
    class B extends D{  //子类的方法覆盖父类的方法
        
        public void method(){
            //super.method();
            System.out.println("你好,世界");
        }
    }
    public class A{
        public static void main(String args[]){
            B go = new B();
            go.method();
            go.good();
        }
    }
      

  6.   

    java命名规范里 确实建议类名首字母要大写,但不是强制
    但这个帖子代码你把类名改为a b c 是完全可以的,而不必改为A B C
    出错的幕后黑手是操作系统的命名机制,文件名大小写被认为同一个文件,无法同时产生A.class和a.class
      

  7.   

    规范啊,main函数所在的类必须与文件的名字一样哦。