A是实现一个接口,当然不能被事例华了,B是继承了Thread,是一个class,当然可以实例化!!!

解决方案 »

  1.   

    果然是扯淡A继承自Object,同时实现Runnable
    至于楼主问为什么两者不能一样,我靠,这个问题问的好,但是不应该问我们,而是问sun
    呵呵,这年头,是个疑问就提,连大脑也不经过
      

  2.   

    A 实现  
      B 继承
    两者的方法当然不一样了!
    看书! THINKING IN JAVA 6.7章!
      

  3.   

    求知欲望还是可以鼓励的嘛,不过好像基础还是有很大差距啊。
    B可以这样运行:
    <<
    new Thread(new B(){public void run(){/*ImplementationHere*/}}).start();
    >>
      

  4.   

    这两种方式都是有用途的。java语言的继承有一个特点是单向继承,就是说一个类不能同时继承两个或者两个以上的类。一个类,如果没有继承其他类,要实现线程那么可以用B方法;如果一个类已经继承了其他类那么就不可能使用B方法来实现线程了,只能用A方法来实现了。其实java中接口的其中一个用途就是可以实现多向继承。
      

  5.   

    是这样的:多线程机制是Thread类提供的,只有Thread类及其之类可以start一个新的线程(使用start()方法,这个方法是native方法,它提供java的多线程机制);run方法只是一个普通的方法,你不能显示的调用它,显示调用它跟调用一个普通的方法没有任何区别;run方法是由start方法调用的,start()调用run的方式如下(实际上在jvm内部还有很多事情要做):
    run();而Thread类的run方法实现如下:
        public void run() {
    if (target != null) {
        target.run();
    }
        }
    其中target是Thread类对象的一个属性,任何实现了Runnable接口的类都可以是一个target,Thread类也实现了Runnable接口;你给出的两种情况中:
    B b=new B(); 
    如果你为B类重定义了run方法,那么b.start()就是运行B类的run方法;如果没有,就是运行从Thread类继承来的run(),此时target为null,什么都不做;而
    A a=new A(); Thread thread=new Thread(a); thread.start();
    thread的target被初始化为a,thread.start()启动的线程运行的是a.run()明白了吗?如果还不明白,那么看看Thread类的源代码吧。
      

  6.   

    谢谢  goldenhua(深深地爱上了你)