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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lwy0319 高级黑马   /  2014-3-17 17:42  /  2368 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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接口的类  其实例化的对象名称)?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

3 个回复

倒序浏览
构造函数接收的是Runable这是一个超级接口,而你的MyThread类已经实现 此接口,你可以理解为MyThread类是Runnable的一个子类,因为它是接口不能继承,所有只能实现此类。Runnable是可以接收其实现类(可以理解为子类)的。其实就 是一句话:多态中的父类引用指向子类对象。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
new Thread(A).strat();实现Runnadble必须要通过Thread类建立线程对象,然后将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
原来如此,提到多态和子父类就明白了,我又写了个段代码验证了下
  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类的方法所接收运行,之前基础没打牢,谢谢了

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马