黑马程序员技术交流社区

标题: 实现Runnable接口问题 [打印本页]

作者: zcbyzcb    时间: 2013-7-24 10:12
标题: 实现Runnable接口问题
本帖最后由 杨兴庭 于 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. }
复制代码
被注释的那一句编译是不能通过的,求解
作者: 薛淑凯    时间: 2013-7-24 10:35
实际上并不是不能调用this,而是getName方法是Thread类中的,没有继承就不能用了
作者: liuzhming    时间: 2013-7-24 10:50
你写的这个类是实现了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();
               
        }
}
作者: lljwdbklb    时间: 2013-7-24 11:20
如果你要用到getName()方法 你就继承Thread就行了。
Runnable是个接口,你说Runnable接口里面有实现getName()方法么。
作者: zcbyzcb    时间: 2013-7-24 18:01
liuzhming 发表于 2013-7-24 10:50
你写的这个类是实现了Runnable接口,而getName()方法是定义在Thread类中的,Runnable里面根本就没有这个方 ...

奥,豁然开朗,明白了,谢谢




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