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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张弗睿 中级黑马   /  2016-11-2 23:23  /  1280 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名内部类高搜不明白啊?哪位大神有无什么好法子帮助理解

8 个回复

倒序浏览
你把它理解成外部类的成员,就和方法和变量一样
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
Jarc 发表于 2016-11-2 23:29
你把它理解成外部类的成员,就和方法和变量一样

那当做参数传递又是什么鬼?比如说TreeSet中的比较器,TreeSet<T> ts = new TreeSet<>(new Comparator<T>(){});  怎么传进来的
回复 使用道具 举报
这是两个匿名内部类嵌套吧
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
多看几遍视频多看几遍视频
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
Tyoo 中级黑马 2016-11-3 13:54:12
7#
匿名内部类用得不多吧,我们老师说开发中不建议使用,使用频率比较少。匿名内部类就记住他的格式new class/interface() {} ,主要是省代码,而且不用重复使用这个类的时候应用。
回复 使用道具 举报
Tyoo 中级黑马 2016-11-3 14:01:09
8#
张弗睿 发表于 2016-11-2 23:36
那当做参数传递又是什么鬼?比如说TreeSet中的比较器,TreeSet ts = new TreeSet(new Comparator(){});  怎 ...

对啊,比较器就是一个例子,因为比较器是你定义好了就不重复调用了,所以就用匿名内部类。相当于给TreeSet集合定义有序存储的规则。匿名内部类你可以把他看作两步合并为一步。因为你要用到Comparator接口,所以
1、你得创建一个自定义类(这就是接口的子类)来实现这个接口,
2、然后在类中重写接口的抽象方法compare方法(equals方法不用重写,因为Object类有重写,所有类都直接或间接继承了Object)。
因为这个比较器类不用重复调用,所以可以一步到位定义为匿名内部类了。
回复 使用道具 举报
Jarc 高级黑马 2016-11-4 23:49:09
9#
张弗睿 发表于 2016-11-2 23:36
那当做参数传递又是什么鬼?比如说TreeSet中的比较器,TreeSet ts = new TreeSet(new Comparator(){});  怎 ...

其实你可以把它拆开,这样写只是方便而已,直接重写方法。少定义了一个变量。你搞个子类重写方法,创建子类对象。就是父类引用指向子类对象。多态的表现形式
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马