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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈林阳 黑马帝   /  2011-10-28 08:46  /  2100 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了毕老师的视频了  对匿名内部类还是不是很了解啊  求助

4 个回复

倒序浏览
多看几遍,毕老师讲得已经很贴近大白话了!认真听。。
回复 使用道具 举报
我个人理解是当一个方法需要一个实例化对象时而这个对象只需要一次时就可以用匿名内部类,
而不需要用引用指向它,
obj.method(new Student(){..........});
可以理解为
Student s=new Student();
obj.method(s);
我也有一点没有搞明白,匿名内部类中的那个Student是什么?
obj.method(new InterfaceName(){......................});
怎么还可以用接口new呢?
InterfaceName()是构造函数吗?
接口不是不能new吗?
可能我的表达有问题,不知道各位仁兄能否理解!

评分

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

查看全部评分

回复 使用道具 举报
匿名内部类就是没有名字的内部类,或者说用不着给起名字的类。
如下情形下建议使用匿名内部类:  
·只用到类的一个实例。   
·类在定义后马上用到。   
·类非常小。   
·给类命名并不会导致你的代码更容易被理解。  

在使用匿名内部类时,要记住以下几个原则:  
·匿名内部类不能有构造方法。   
·匿名内部类不能定义任何静态成员、方法和类。   
·匿名内部类不能是public,protected,private,static。   
·只能创建匿名内部类的一个实例。  
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。   
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。   

评分

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

查看全部评分

回复 使用道具 举报
先给你举个小例子
    A(new   B()
        {
                      public   void   C(D   e){
                  ....
                      }
        });
这是最常用的匿名类了。如果匿名类代码不长,这样写着易读
实际上,匿名类这样去理解:
1.类是定义对象的,匿名类也是;
2.别的类有名字,可以多次声明/创建对象,而匿名类没有名字,只能当时直接创建对象实例;
3.由于2,所以有名类可以独立存在于一个源文件;而匿名类最多也就是做为类成员变量的定义,或方法调用的参数,或局部变量的定义(这个比较少,实际上用不到);
4.匿名类构造函数无法实现,因此通常定义的匿名类都是无参的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马