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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李晓峰 于 2013-6-10 22:05 编辑

匿名内部类实现接口为什么不可以传递参数?

class ThreadTestDemo
{
     public static void main(String[] args)
     {
          new Thread()
          {
               public void run()
               {
                    for(int x=0;x<50;x++)
                         System.out.println(Thread.currentThread().getName()+"男"+x);
               }
          }.start();
          Runnable r = new Runnable()//
匿名内部类实现接口不可传递参数?
          {
               public void run()
               {
                    for(int x=0;x<50;x++)
                         System.out.println(Thread.currentThread().getName()+".....女女女女....."+x);
               }
          };
          Thread t = new Thread(r);
          t.start();
     }
}




评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
因为Runnable是接口,接口不允许实例化所以没有构造函数,你往里面传参数能给谁呢?

以下是Runnable的API信息:
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。

设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。

此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 赞一个!

查看全部评分

回复 使用道具 举报
匿名内部类是已父类或接口名字体现的子类对象,传递参数是对像创建时相应的类里有这个带参数的构造函数才可以,
匿名内部类实现的接口就是空参的,不是用的子类这个对象本身类的形式,当然就不能传递参数,这本身就是临时
创建一个Runnable的子类,它的本身类形式都没定义,何谈参数

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
接口里都是抽象类 ,抽象类如果有构造也不能实例化的。而是留给其子类使用的。而匿名内部类实际上传递的是类或者接口的子类对象。如果想实例化的话。可以选择其子类,用多态来实现。
回复 使用道具 举报
是的。首先,你也说了,你的匿名内部类是去实现一个接口的,而interface接口是不可以有构造函数的,连构造函数都没有,你怎么传递参数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马