首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

类的继承 出错啦。解决办法

2012-02-09 
类的继承出错啦。。。Java codepackage worldclass a {public void method(){System.out.println(hello wor

类的继承 出错啦。。。

Java code
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)

请大牛们分析下 谢谢

[解决办法]
Java code
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();    }}
[解决办法]
windows 操作系统 是无法区分文件名的大小写的
你可以在c:\ 下建一个文件A.class 但你再一次建一个文件a.class 时
它会提示“指定的文件名与现有的文件名重名,请指定另一个文件名”
所以当你在编译时是没办法同时生成A.class和a.class和b.class 除非将来有一天JVM的权限胜过windows操作系统


你可以使用内部类解决文件名冲突的问题 类似下面的写法 此时同时生成 A.class A$b.class A$a.class 

Java code
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("你好,世界");    }    }}
------解决方案--------------------


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("你好,世界");
}
}

}


[解决办法]
把父类和子类的类名改成大写就可以
[解决办法]
名字还是稍微有点含义的好,虽然是刚开始,测试的,但习惯很重要哦
[解决办法]
主要是你的类名字有问题,不符合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();
}
}



[解决办法]
java命名规范里 确实建议类名首字母要大写,但不是强制
但这个帖子代码你把类名改为a b c 是完全可以的,而不必改为A B C
出错的幕后黑手是操作系统的命名机制,文件名大小写被认为同一个文件,无法同时产生A.class和a.class
[解决办法]
把类名改了就可以运行了
[解决办法]
规范啊,main函数所在的类必须与文件的名字一样哦。
[解决办法]
唉,看到你的代码规范,笑而不语。
[解决办法]
虽然类名大小写敏感,但是代码规范类名首字母是要大写滴。

热点排行
Bad Request.