黑马程序员技术交流社区
标题:
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
原来如此,提到多态和子父类就明白了,我又写了个段代码验证了下
class FU {
void fun(){
System.out.println("hehe");
}
}
class ZI extends FU{
public void fun() {
System.out.println("haha");
}
}
public class Demo {
public static void show(FU a){
a.fun();
}
public static void main(String[] args){
ZI b=new ZI();
Demo.show(b);
}
}
复制代码
show(b)中b为子类的实例对象也可以被定义参数类型为FU类的方法所接收运行,之前基础没打牢,谢谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2