黑马程序员技术交流社区

标题: 线程既实现runnable,又继承thread [打印本页]

作者: 张 涛    时间: 2012-9-15 12:26
标题: 线程既实现runnable,又继承thread
本帖最后由 张 涛 于 2012-9-20 19:46 编辑

一个线程既实现runnable,又继承thread,都实现了run方法,两个run方法到底实现哪个呢?
代码如下:
  1. Thread th3 = new Thread(new Runnable(){
  2. @Override
  3. public void run() {
  4. System.out.println("RUNNABLE");
  5. }

  6. }){
  7. @Override
  8. public void run() {
  9. System.out.println("thread");
  10. }
  11. };
  12. th3.start();
复制代码
结果是Thread,也就是运行的thread的run方法。

run方法的源码是:
  1. public void run() {
  2. if (target != null) {//target是runnable接口
  3. target.run();
  4. }
  5. }
复制代码
那么,子类复写了run方法,复写了的子类中没有处理runnable实例target的代码,所以不会执行runnable的run方法,因为被复写后,target.run方法没了,是这样理解吗?


作者: 小黑马    时间: 2012-9-15 12:47
接口只是定义了一种规范,而且没有方法体,接口只是规范你必须这么做,具体怎么做并没有说,
API文档中查看thread类
类 Thread
java.lang.Object
  java.lang.Thread
所有已实现的接口:
Runnable
他已经实现了Runnable 接口


作者: 张 涛    时间: 2012-9-18 14:55
这种情况是先继承父类,还是先实现接口?
作者: 明光照    时间: 2012-9-20 19:39
public class Test_2 {

        static Thread th3 = new Thread(new Runnable() {

                public void run() {

                        System.out.println("RUNNABLE");

                }

        }) {

                public void run() {

                        System.out.println("thread");

                }

        };

        public static void main(String args[]) {
                th3.start();
        }

}
从结果可以看出,是执行的Thread中run方法




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