通过查阅api文档,
run()的定义:
              public void run()

sleep()的定义:
              static void sleep()1.请问为什么非静态的run方法能调用静态的sleep方法?感谢你的回复!****************************************************************class MyThread extends Thread{ @Override
public void run() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}2.如上,当自己的定义的线程类重写run()方法,归根到底是重写 Runnable接口中的run()方法 还是 Thread类中的 run()方法,虽然Thread类也是实现了Runnable接口,但我想知道归根到底是不是重写 Runnable接口中的run()方法?我想听听你们的声音来确定一下!感谢你们的回复。

解决方案 »

  1.   

    第一个问题: Thread.sleep(1000);调用静态方法是使用类名.方法名来调用的, 而实例方法是用实例名.方法名来调用.第二个问题, 你继承了Thread类, 所以, 重写的是Thread类的run()方法.从继承结构上来讲, Thread是实现了Runnable接口, 所以, Thread类本身就重写了run方法, 但是, 它的重写可能并不能满足我们所有的需求, 所以, 我们需要将其再次重写, 形成自己的线程类, 做自己的处理.
      

  2.   

     Thread类里面的run方法是用来调用Runnable接口的run方法的
    参见构造函数Thread(Runnable target)和run()方法
        public void run() {
    if (target != null) {
        target.run();
    }
        }
      

  3.   

    看书或者思考时间长了,就容易反应迟钝,你还是休息下,过一段时间思考下,全明白了。
    第二个问题,不管是不是在线程里面,既然继承了父类,又对里面的方法重新定义,那当然是重写了父类里面的方法。至于你问“归根到底是不是重写 Runnable接口中的run()方法”,有意义吗?他们就是一条链,
    接口中的方法run()
    |
    |
    子类A中run()
    |
    |
    子类B中run()
    你百度下“多态”这个定义查下。
      

  4.   

    public class MyThread extends Thread implements Runnable{
      public void run(){
        ////////
      }
    }
    都重写了
    如果用new MyThread().start()就是Thread
    用new Thread(new MyThread()).start()就是RunnableThread本身就实现Runnable个人理解
      

  5.   

    static定义的静态方法,类方法本来就可以调用。楼主先看一下java基础里面方法那一章节的内容吧!