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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒙武辉 黑马帝   /  2012-2-17 17:19  /  2664 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是匿名内部类?我的理解没有名字的类带实现功能的对象。不知道对不对?
我看见视频上说,有一个接口comparator把它写成匿名内部类是这样?
TreeSet ts=new TreeSet(new comparator(){
           程序代码
});
疑问:接口直接可以new吗?不用实现了吗?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
意思是你在new TreeSet的时候 传了一个 (实现了comparator接口的没有名字的内部类的对象)作为参数
回复 使用道具 举报
什么是匿名内部类?我的理解没有名字的类带实现功能的对象(实现了当前类的子类的一个对象)。不知道对不对?
我看见视频上说,有一个接口comparator把它写成匿名内部类是这样?
TreeSet ts=new TreeSet(new comparator(){
           程序代码
});
疑问:接口直接可以new吗?不用实现了吗?(这边并不是new的Comparator接口,而new的是其子类)

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
首先要搞清楚局部内部类 (出现在局部变量那个位置上的类,叫做局部内部类),而将局部内部类的使用再深入一步,即是匿名内部类(假如只创建这个类的一个对象,就不必命名了的意思)
例public class Test{
       public static void main(String[] args){
              /*
              B b = new B();
              b.mm(new AImpl());
              */
              B b = new B();
              b.mm(new A(){
                     public void m(){
                            System.out.println("m method invoked!...........");
                     }
              });
       }

}
interface A{
       void m();
}
/*
class AImpl implements A{
       public void m(){
              System.out.println("m method invoked!");
       }
}
*/
class B{
       public void mm(A a){
              a.m();
       }
}

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
内部类就是在一个类中嵌套了一个类,内部类中通常实现一些方法,匿名内部类一般android中用的很多,那么举例比如说类A实现了Runnable这个接口,应该知道实现这个接口执行里面run方法就是多线程。通常也许我们会
class A implements Runnable{
             public void run(){执行多线程}
}
这种情况我也可以这么写
Runnable A=new Runnable(){
             public void run(){执行多线程}
};(这里有分号)
我们知道接口是不能new的 , 那上面这种情况就是说在new一个接口的形式,但是这样写可别理解为在创建对象A,这里A可是一个类,只是没有通过最上面的写法,而是直接这样写得,那个run方法就是A类实现Runnable接口的重写方法,那么匿名内部类就是说把A去掉,让他没名字的类,比如
new Runnable(){
             public void run(){执行多线程}
};(这里有分号)
这样也是一个类,只是不知道名字,好比new A();创建对象没有引用一样,我们可以说匿名引用。

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

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