黑马程序员技术交流社区

标题: 匿名内部类 ?这么一道题 [打印本页]

作者: 不抛弃不放弃    时间: 2013-11-14 11:45
标题: 匿名内部类 ?这么一道题
本帖最后由 不抛弃不放弃 于 2013-11-14 12:34 编辑

infterface Inter{
  public void method();
}

class Test{
      //推出这里面的匿名内部类的   代码

}

class InnerClassTest{

    public static void main(String []args){
             Test.function().method();//给定这个  推出匿名内部类
   }
}
// 尽量详细讲解 谢谢

作者: linjl_ll    时间: 2013-11-14 11:59
Test.function().method();//给定这个  推出匿名内部类
看上面这句话,可以先将它肢解下  Test.function();这句通过类名直接访问内部的方法说明function是静态的且是public的,所以类Test应该是下面格式的
class Test{
   public  static ?(返回值目前不确定) function(){
    }
}
在后面加上.method();说明Test.function();返回的是一个对象这个对象中有一个public的method()方法,所以这里返回的是一个实现了Inner接口的类的实例对象(我们知道匿名内部类时这个类必须继承一个类或实现一个接口,那我们这边能不能继承一个累呢?不行因为这边没有声明一个包含method的方法,换句话说只能继承Object,但是Object中没有method方法,这就导致外部无法调用该类的method方法,所以只能实现Inner接口),所以代码如下
class Test{
    public static Inner/*这是就确定了类型*/function(){
        return new Inner(){
            
          public void method(){system.out.println("in method")/*代码*/}
             };
   }
}



作者: 黄小贝    时间: 2013-11-14 12:06

  1. interface Inter{
  2.           public void method();
  3.         }

  4. class Test{

  5.         public static Inter function() {
  6.                
  7.                 return new Inter() {
  8.                         
  9.                         @Override
  10.                         public void method() {
  11.                                 
  12.                                 
  13.                         }
  14.                 };
  15.         }

  16. }

  17. /*
  18. * 1)从Test.function()可以看出Test里面有个function方法,而且是静态的(不是静态的需要new一个对象再调用)
  19. * 2)从Test.function().method()的第二个点可以看出Test.function()返回的是一个对象,而且这个对象里面有个method方法
  20. * 3)在从Inter接口可以看出这个类还实现了Inter接口,然后结果就出来了
  21. */
  22. class InnerClassTest{

  23.     public static void main(String []args){
  24.              Test.function().method();//给定这个  推出匿名内部类
  25.    }
  26. }
复制代码
1)从Test.function()可以看出Test里面有个function方法,而且是静态的(不是静态的需要new一个对象再调用)
2)从Test.function().method()的第二个点可以看出Test.function()返回的是一个对象,而且这个对象里面有个method方法
3)在从Inter接口可以看出这个类还实现了Inter接口,然后结果就出来了







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