使用匿名类的构造函数
来源:互联网 发布:淘宝极有家和中国质造 编辑:程序博客网 时间:2024/04/27 07:25
使用匿名类的构造函数
阅读如下代码,看看是否可以编译:
- public static void main(String[] args) {
- List l1 = new ArrayList();
- List l2 = new ArrayList(){};
- List l3 = new ArrayList(){{}};
- System.out.println(l1.getClass() == l2.getClass());
- System.out.println(l2.getClass() == l3.getClass());
- System.out.println(l1.getClass() == l3.getClass());
- }
注意ArrayList后面的不同点:l1变量后面什么都没有,l2后面有一对{},l3后面有2对嵌套的{},这段程序能不能编译呢?若能编译,那输出是多少呢?
答案是能编译,输出的是3个false。l1很容易解释,就是声明了ArrayList的实例对象,那l2和l3代表的是什么呢?
(1)l2=new ArrayList(){}
l2代表的是一个匿名类的声明和赋值,它定义了一个继承于ArrayList的匿名类,只是没有任何的覆写方法而已,其代码类似于:
- //定义一个继承ArrayList的内部类
- class Sub extends ArrayList{
- }
- //声明和赋值
- List l2 = new Sub();
(2) l3=new ArrayList(){{}}
这个语句就有点怪了,还带了两对大括号,我们分开来解释就会明白了,这也是一个匿名类的定义,它的代码类似于:
看到了吧,就是多了一个初始化块而已,起到构造函数的功能。我们知道一个类肯定有一个构造函数,且构造函数的名称和类名相同,那问题来了:匿名类的构造函数是什么呢?它没有名字呀!很显然,初始化块就是它的构造函数。当然,一个类中的构造函数块可以是多个,也就是说可以出现如下代码:
- //定义一个继承ArrayList的内部类
- class Sub extends ArrayList{
- {
- //初始化块
- }
- }
- //声明和赋值
- List l3 = new Sub();
上面的代码是正确无误,没有任何问题的。现在清楚了:匿名函数虽然没有名字,但也是可以有构造函数的,它用构造函数块来代替,那上面的3个输出就很清楚了:虽然父类相同,但是类还是不同的。
- List l3 = new ArrayList(){{}{}{}{}{}};
0 0
- 使用匿名类的构造函数
- 使用匿名类的构造函数
- 使用匿名内部类的构造函数
- 匿名类的构造函数很特殊
- 匿名类的构造函数很特殊
- 匿名函数的使用
- 解决匿名类构造函数问题 Java
- 匿名对象与构造方法的使用
- 构造方法和匿名对象的使用
- flex 匿名函数的使用
- Python匿名函数的使用
- js的get set, 构造函数,匿名函数,prototype(原型)
- 三角形类的构造函数-使用带参数构造函数
- Java基础(面向对象一——理解、匿名函数、封装、构造函数和this关键字的使用)
- 汽车的匿名构造
- 关于匿名函数构造器的继承问题
- 构造函数的使用
- 构造函数的使用
- 在IOS中使用KeychainItemWrapper保存用户名和密码实现记住密码功能
- Linux下用C编写WebSocet服务以响应HTML5的WebSocket请求
- 工作过程中的一些小细节与大问题
- Android 增加第三方库
- POJ 2961 Sylvester construction 哈达玛矩阵
- 使用匿名类的构造函数
- AttachCurrentThread
- HTML5本地数据库(SQLite)示例
- 如何处理javascript中var类型有效数据极限值问题(超大数据)
- keepalive学习之软件设计
- cocos2d-x中的lua调试
- 临时表空间使用情况查询
- OCP-1Z0-053-200题-44题-622
- list操作