A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 张 涛 中级黑马   /  2012-9-15 12:26  /  1638 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张 涛 于 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方法没了,是这样理解吗?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
接口只是定义了一种规范,而且没有方法体,接口只是规范你必须这么做,具体怎么做并没有说,
API文档中查看thread类
类 Thread
java.lang.Object
  java.lang.Thread
所有已实现的接口:
Runnable
他已经实现了Runnable 接口

回复 使用道具 举报
这种情况是先继承父类,还是先实现接口?
回复 使用道具 举报
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方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马