黑马程序员技术交流社区

标题: 线程RUN方法的问题,结果不理解 [打印本页]

作者: 一诺千金    时间: 2014-3-29 17:00
标题: 线程RUN方法的问题,结果不理解
new Thread(new Runnable(){ //匿名
            public voidrun(){
                System.out.println("runnablerun");
            }
        })
        {
            public voidrun(){
                System.out.println("subthreadrun");
            }
        }.start();  
//结果:subthreadrun


作者: 海世山盟    时间: 2014-3-29 19:11
其实Thread类继承了Object类 实现了Runnable接口。所以在Thread李的方法覆盖了Runnable的方法。因此打印结果就是这样的了。。
作者: caijunsong    时间: 2014-3-29 19:36
你的代码怎么写的乱起八糟的   你把你的整个代码都粘上去,版主你怎么给分了!!!
作者: 海世山盟    时间: 2014-3-29 19:57
caijunsong 发表于 2014-3-29 19:36
你的代码怎么写的乱起八糟的   你把你的整个代码都粘上去,版主你怎么给分了!!! ...

人家用的是匿名形式写的。
作者: caijunsong    时间: 2014-3-29 21:47
海世山盟 发表于 2014-3-29 19:57
人家用的是匿名形式写的。

你好 我还真的看不懂 麻烦朋友 把它完整的还原一遍下
作者: Softlmis    时间: 2014-3-29 21:59
本帖最后由 Softlmis 于 2014-3-29 22:11 编辑
  1. <p>new Thread(new Runnable(){ //匿名

  2.             public voidrun(){

  3.                 System.out.println("runnablerun");

  4.             }

  5.         });         //少了一个分号

  6. {
  7.      public voidrun(){
  8.         System.out.println"subthreadrun");
  9.      }
  10. }.start(); </p>
复制代码

总算是看明白了:是不是有个实例代码块?

但是你上面少了个分号吧?应该是这样的:


但是写法还是有问题啊。编译不过去的。实例代码块中不能有方法


作者: ╰つ    时间: 2014-3-29 22:30
这个就是多态的问题,让我们一起来看一下把,Thread里面有个run方法,然后实现接口,就覆盖了run方法,好重点来了,你看最下面的子类又覆盖了run方法,所以打印的就是这个子类里面的内容:subthreadrun
作者: ╰青青子佩ˊゝ    时间: 2014-3-29 22:57
代码没有错的。
  1. //Tread类本身就实现了Runnable接口。如下代码:
  2.                 new Thread(){
  3.                         public void run(){
  4.                                 System.out.println("lala");
  5.                         }
  6.                 }.start();
  7.                 //new Thread()中传入一个实现了Runnable接口的类(new Runnable(){public void run(){}})的话,那么执行这其中的run中代码。                、、
  8.                 //像这段代码,先向Thread对象中传入实现了Runnable接口的类的对象,再将Thread对象中的run方法复写,那么只会执行后面那个run方法中代码.
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2