黑马程序员技术交流社区

标题: 该如何理解匿名内部类的功能? [打印本页]

作者: tonygone    时间: 2013-7-17 14:18
标题: 该如何理解匿名内部类的功能?
本帖最后由 tonygone 于 2013-7-18 08:11 编辑

可不可以理解为没有构造器的特殊局部内部类,主要是用来临时扩充父类的功能,还可以当父类对象用?
作者: 张先庆    时间: 2013-7-17 21:45
匿名内部类的特点:1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。2,只是为了获得一个对象实例,不需要知道其实际类型。3,类名没有意义,也就是不需要使用到。

一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
作者: 云游天下    时间: 2013-7-17 22:27
楼上答的就挺全的 我再补充一下吧  
你要去理解什么是内部类,内部类的作用,java的多态,什么是回调函数。匿名内部类是当做函数的参数传递给方法的,在这个方法中,会用接口类型接受传入的匿名类,然后调用其方法,这是多态。原理其实是实现了回调。因为他会调用你匿名内部类中的方法。给你举个例子:
手敲的代码,未经测试
interface InterfaceA{         
String go();
}
class Test(){  
       public void prtGo(InterfaceA ia){  
                System.out.println(ia.o());
        }        
      public static void main(String []args){      
            Test t = new Test();           
            t.prtGo(new InterfaceA(){         
                 public String go(){            
                 return "go";            
               }              
    });      
  }}




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