黑马程序员技术交流社区

标题: 匿名内部类的问题? [打印本页]

作者: 蒙武辉    时间: 2012-2-17 17:19
标题: 匿名内部类的问题?
什么是匿名内部类?我的理解没有名字的类带实现功能的对象。不知道对不对?
我看见视频上说,有一个接口comparator把它写成匿名内部类是这样?
TreeSet ts=new TreeSet(new comparator(){
           程序代码
});
疑问:接口直接可以new吗?不用实现了吗?
作者: 丁晓宇    时间: 2012-2-17 17:38
意思是你在new TreeSet的时候 传了一个 (实现了comparator接口的没有名字的内部类的对象)作为参数
作者: 刘基军    时间: 2012-2-17 18:25
什么是匿名内部类?我的理解没有名字的类带实现功能的对象(实现了当前类的子类的一个对象)。不知道对不对?
我看见视频上说,有一个接口comparator把它写成匿名内部类是这样?
TreeSet ts=new TreeSet(new comparator(){
           程序代码
});
疑问:接口直接可以new吗?不用实现了吗?(这边并不是new的Comparator接口,而new的是其子类)
作者: 唐溪永    时间: 2012-2-19 22:30
首先要搞清楚局部内部类 (出现在局部变量那个位置上的类,叫做局部内部类),而将局部内部类的使用再深入一步,即是匿名内部类(假如只创建这个类的一个对象,就不必命名了的意思)
例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();
       }
}
作者: 陈伟    时间: 2012-2-19 22:45
内部类就是在一个类中嵌套了一个类,内部类中通常实现一些方法,匿名内部类一般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();创建对象没有引用一样,我们可以说匿名引用。




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