黑马程序员技术交流社区

标题: 匿名内部类实现接口为什么不可以传递参数? [打印本页]

作者: 李晓峰    时间: 2013-6-10 21:28
标题: 匿名内部类实现接口为什么不可以传递参数?
本帖最后由 李晓峰 于 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();
     }
}





作者: 小冰块    时间: 2013-6-10 21:38
因为Runnable是接口,接口不允许实例化所以没有构造函数,你往里面传参数能给谁呢?

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

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

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


作者: x378320002    时间: 2013-6-10 21:44
匿名内部类是已父类或接口名字体现的子类对象,传递参数是对像创建时相应的类里有这个带参数的构造函数才可以,
匿名内部类实现的接口就是空参的,不是用的子类这个对象本身类的形式,当然就不能传递参数,这本身就是临时
创建一个Runnable的子类,它的本身类形式都没定义,何谈参数
作者: j816326    时间: 2013-6-10 21:45
接口里都是抽象类 ,抽象类如果有构造也不能实例化的。而是留给其子类使用的。而匿名内部类实际上传递的是类或者接口的子类对象。如果想实例化的话。可以选择其子类,用多态来实现。
作者: slatop@qq.com    时间: 2013-6-10 22:01
是的。首先,你也说了,你的匿名内部类是去实现一个接口的,而interface接口是不可以有构造函数的,连构造函数都没有,你怎么传递参数




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