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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tonygone 中级黑马   /  2013-7-17 14:18  /  1186 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tonygone 于 2013-7-18 08:11 编辑

可不可以理解为没有构造器的特殊局部内部类,主要是用来临时扩充父类的功能,还可以当父类对象用?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

2 个回复

倒序浏览
匿名内部类的特点:1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。2,只是为了获得一个对象实例,不需要知道其实际类型。3,类名没有意义,也就是不需要使用到。

一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
回复 使用道具 举报
楼上答的就挺全的 我再补充一下吧  
你要去理解什么是内部类,内部类的作用,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";            
               }              
    });      
  }}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马