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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zcbyzcb 中级黑马   /  2013-7-24 10:12  /  1127 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-24 20:59 编辑

    为什么自定线程类实现Runnable接口时,run方法中不能调用this对象,比如
  1. class Thread2 implements Runnable
  2. {
  3.         public void run()
  4.         {
  5.                 int i=50;
  6.                 while(i!=0)
  7.                 {
  8.                         System.out.println(Thread.currentThread().getName()+"---"+"方法二");
  9. //System.out.println(this.getName()+"---"+"方法二");
  10.                         i--;
  11.                 }
  12.         }
  13. }
复制代码
被注释的那一句编译是不能通过的,求解

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
实际上并不是不能调用this,而是getName方法是Thread类中的,没有继承就不能用了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
你写的这个类是实现了Runnable接口,而getName()方法是定义在Thread类中的,Runnable里面根本就没有这个方法。而且你在Thread2这个类中也没有定义一个getName()方法,编译器不知道这是什么方法。如果继承自Thread类,就可以这么做了,代码如下:
public class Thread2 extends Thread
{
        public void run()
        {
                 int i=50;
         while(i!=0)
         {
        //         System.out.println(Thread.currentThread().getName()+"---"+"方法二");
                 System.out.println(this.getName()+"---"+"方法二");
                   i--;
         }
        }
        public static void main(String[] args)
        {
                Thread2 t = new Thread2();
                t.start();
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
如果你要用到getName()方法 你就继承Thread就行了。
Runnable是个接口,你说Runnable接口里面有实现getName()方法么。
回复 使用道具 举报
liuzhming 发表于 2013-7-24 10:50
你写的这个类是实现了Runnable接口,而getName()方法是定义在Thread类中的,Runnable里面根本就没有这个方 ...

奥,豁然开朗,明白了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马