黑马程序员技术交流社区

标题: Thread类构造方法与Runnable [打印本页]

作者: lwy0319    时间: 2014-3-17 17:42
标题: Thread类构造方法与Runnable
本帖最后由 lwy0319 于 2014-3-22 00:15 编辑

昨天开始学习多线程,发现有点儿不解的地方,用类MyThread实现了Runnable后创建的实例对象A,可以通过创建Thread类的实例对象来实现多线程的运行:class MyThread implements Runnable{
…………………………
}
MyThread A=new MyThread();
Thread a=new Thread(A);
a.strat();
我查了下API,上面关于Thread(Runnable target)构造方法提到接收的数据类型为Runnadble,不太明白这里是什么原理,因为曾经在学习数据类型分类中提到:类,接口,数组同属于引用数据类型,这里MyThread在数据类型中属于类,为什么可以作为接口类型的参数传递进Thread()的构造方法呢?还是说Thread的构造方法是这样解读的:Thread(实现Runnable接口的类  其实例化的对象名称)?


作者: 无道    时间: 2014-3-17 18:15
构造函数接收的是Runable这是一个超级接口,而你的MyThread类已经实现 此接口,你可以理解为MyThread类是Runnable的一个子类,因为它是接口不能继承,所有只能实现此类。Runnable是可以接收其实现类(可以理解为子类)的。其实就 是一句话:多态中的父类引用指向子类对象。
作者: 刘凯旋    时间: 2014-3-17 21:04
new Thread(A).strat();实现Runnadble必须要通过Thread类建立线程对象,然后将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法
作者: lwy0319    时间: 2014-3-18 04:04
原来如此,提到多态和子父类就明白了,我又写了个段代码验证了下
  1. class FU {
  2.         void fun(){
  3.                 System.out.println("hehe");
  4.         }
  5. }
  6. class ZI extends FU{
  7.         public void fun() {
  8.                 System.out.println("haha");
  9.         }
  10. }
  11. public class Demo {
  12.         public static void show(FU a){
  13.                 a.fun();
  14.         }
  15.         public static void main(String[] args){
  16.                 ZI b=new ZI();
  17.                  Demo.show(b);
  18.         }
  19. }
复制代码

show(b)中b为子类的实例对象也可以被定义参数类型为FU类的方法所接收运行,之前基础没打牢,谢谢了




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