黑马程序员技术交流社区

标题: 输出哪一句?为什么呢? [打印本页]

作者: 朦胧色彩    时间: 2015-10-20 10:22
标题: 输出哪一句?为什么呢?
new Thread(new Runnable()
{
    public void run()
    {
        System.out.println("runnable run");
    }
})
{
    public void run()
    {
        System.out.println("subThread run");
    }
}.start();

作者: fmi110    时间: 2015-10-20 12:57
输出 subThread run
Thread类里边有一个 run 方法,原方法的代码大致原理是这样的
public void run(){
    myRunnable.run()
}
其中myRunnable 为你传递给Thread 的实现了Runnable接口的对象,
所以在不继承Thread类 创建线程时,需要传递一个Runnable的实例,
但是在继承Thread类时,需要重写 run()方法,方法体内容是自己定义的,所以不会再去调用
new Runnable()重点run方法。
即  创建线程时  实行顺序是   先 子类的run    后  接口的 run
作者: 三川草民    时间: 2015-10-20 13:23
subThread run
作者: 罗志辉    时间: 2015-10-20 13:53
runnable run会将Runnable的抽象方法给复写掉,就是说Thread类的run方法已被复写成runnable run,这时再建立Thread类的匿名内部内时,subThread run方法又把runnable run方法给复写掉了
所以会输出subThread run
可以使用super.run()测试一下的。
作者: 朦胧色彩    时间: 2015-10-20 16:05
fmi110 发表于 2015-10-20 12:57
输出 subThread run
Thread类里边有一个 run 方法,原方法的代码大致原理是这样的
public void run(){

谢谢!大概明白了
作者: 朦胧色彩    时间: 2015-10-20 16:06
罗志辉 发表于 2015-10-20 13:53
runnable run会将Runnable的抽象方法给复写掉,就是说Thread类的run方法已被复写成runnable run,这时再建 ...

嗯嗯!多谢指教!我明白了
作者: bukai123    时间: 2015-10-20 16:16
学习一下~~~
作者: 莫盛强    时间: 2015-10-20 18:20
亲测是Thread重写的领先




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