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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

之前在一家培训机构,一个技术总监提了我几个问题,第一个就是匿名内部类的主要作用,我当时就懵了,我知道匿名内部类,但它是用来干嘛的,以及主要作用我都给忘了。

4 个回复

倒序浏览
等待大神回答
回复 使用道具 举报
我倒不是大神,试着解释一下。
首先举个例子,这几天在看老毕的GUI,常看到下面这个用法:
  addWindowListener(new WindowAdapter() {   
                     public void windowClosing(WindowEvent e) {   
                     System.exit(0);   
                     }   
                     });
这个东西其实就是实现窗口右上角的小叉叉的关闭功能。
        所以先说说匿名,匿名就是 new Class() 这个东西 如果加上左边就很好理解了。其实匿名的对象就是无法创建对象的类(抽象类等)或者是只用一次而不需要引用地址的类(比如方法非静态又只想用一次没必要创建对象后把地址值留住)。
        就像这个例子里的WindowAdapter其实是一个抽象类,我想要一个对象就要用一个类重写他的方法,但是我用只想用一次所以觉得很不划算。于是我创建一个匿名的对象然后再后面的方法体中直接重写了我需要用到的方法。既然重写他了,所以就可以称其是一个类,其实new过了之后他的本质是一个对象,所以这种做法可以等价于是定义了一个WindowAdapter子类,并重写了函数后创建了一个对象。但是显然这种匿名内部类的写法更加简洁。
        以上仅为个人见解,期待真正大神。

回复 使用道具 举报
貌似是省内存用的
回复 使用道具 举报
匿名内部类前提:必须继承一个父类或实现一个接口。
匿名内部类的格式:  new 父类或者接口( ){定义子类重写内容}
应用环境:当一个方法的形参是一个接口时,如何调用该方法?其实该方法需要的是实现这个接口的一个子类对象。
解决办法:
1、创建一个具体的类实现这个接口,然后将这个实现类的对象传入该方法
2、可以通过匿名内部类实现,即将“new 父类或者接口( ){定义子类重写内容}”传入该方法
匿名内部类的主要作用应该就是上面说的情况了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马