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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© air 中级黑马   /  2013-11-9 18:01  /  1196 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. interface Test
  2. {
  3.         void func();
  4. }


  5. class  
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //补足代码;(匿名内部类)
  10.                 new Demo().show(new Test()
  11.                         {
  12.                                 public void func(){}
  13.                         });
  14.         }
  15.         void show(Test t)
  16.         {
  17.                 t.func();
  18.         }


  19. }
复制代码
实在是被这视频里的测试题搞得头疼,老师讲的又快,说这道题比较综合,又好像理解不理解都没关系.
可是我实在是想知道,这里面的关系我理不清,.一堆括号看的我晕 啊~~~
求帮助讲解答案意义

3 个回复

倒序浏览
new Demo().show( ... )         获得一个 Demo 类的 匿名实例对象,然后调用该对象的 show 方法
show 方法的参数是 Test t           所以填了 new Test()
而 Test 是一个接口,需要实现接口的 func() 方法 所以你这个 new 的 Test 得实现这个方法{。。。}
其实匿名内部类就是写一个类的子类/实现类
回复 使用道具 举报
其实可以把认为存在class Param implements Test
                           {
                                   public void func(){}
                           };
                            Test t=new Param()
                             new Demo.show(t)
Param实现了接口Test中func方法,然后新建一个对象t,将t传给了show。
可以把您看起来比较纠结的那部分代码看做上述代码的简写形式,简写无非是把定义类和生成对象的操作一气呵成!
回复 使用道具 举报
  • new Demo().show(new Test()
  •                         {
  •                                 public void func(){}
  •                         });
  • 实际上你要调用  show()方式就需要Demo的一个对象  所以 new Demo() 好,此时对象出来了。我们用它调用show()方法
  • new Demo().show()  但是 程序中定义的show()是带有参数的
    • void show(Test t)
    •         {
    •                 t.func();
    •         }
    • 于是 我们要调用show()方法必须有一个Test类的对象才能正确的调用  可是Test是个接口无法new
    • 此时我们就可以采用匿名内部类来实现Test这个接口 并且创建匿名内部类的对象
    • 所以创建匿名内部类的对象就是
      • new Test()
      •                         {
      •                                 public void func(){}
      •                         }
      • 其实这一段代码就相当于是  show(Test t)里面的t
      • 采用匿名内部类在这个程序里好处不明显  假设你的Test接口里面有好多好多的抽象方法;
      • 而此时你要调用其中的一个func()方法  为了这一个方法你去创建子类不是太麻烦了么
      • 所以匿名内部类在这个时候就很有用了


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