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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨长川 于 2013-3-27 13:33 编辑

看到毕老师的第十二天的最后个视频,开发中常用创建多线程的几种方式,其中有一种是通过匿名内部类创建的,想到毕老师之前讲的接口是不可能创建对象的,因为有抽象方法。需要被子类实现(implements),子类对接口中的抽象方法全都覆盖后,子类才可以实例化。但是这个代码里,new Runnable()、Runnable就是个接口,这不是在创建对象吗?是因为内部类没有名字就没法创建对象,要用接口来创建,然后{ }里的代码来实现这个接口,传给了接口后,这样就返回一个匿名子类的对象??有点不明白,大家是怎么理解的呢?
  1. Runnable r = new Runnable()
  2.   {
  3.    public void run()
  4.    {
  5.     for (int x = 0;x<80 ;x++ )
  6.     {
  7.      System.out.println(Thread.currentThread().getName()+"......"+x);
  8.     }
  9.    }
  10.   };
  11. new Thread(r).start();
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
我觉得其实就是匿名内部类的写法。
new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。
但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。
一个抽象类或者接口是不能直接new 的,必须先有实现类了才能new出它的实现类。
这个写法其实就是表示new 的是Father(Runnable)的实现类,这个实现类是个匿名内部类。
不舒服的话把那个匿名内部类拆出来,
class rRun extends Runnable{
  //实现run方法
}
public class Test{
   Runnable f1 = new  rRun() ;
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问;没有的话,尽量及时将帖子分类改成【已解决】哦~
回复 使用道具 举报
学习了啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马