黑马程序员技术交流社区

标题: 关于匿名内部类,求大神解惑 [打印本页]

作者: 张弗睿    时间: 2016-11-2 23:23
标题: 关于匿名内部类,求大神解惑
匿名内部类高搜不明白啊?哪位大神有无什么好法子帮助理解
作者: Jarc    时间: 2016-11-2 23:29
你把它理解成外部类的成员,就和方法和变量一样

作者: 张弗睿    时间: 2016-11-2 23:36
Jarc 发表于 2016-11-2 23:29
你把它理解成外部类的成员,就和方法和变量一样

那当做参数传递又是什么鬼?比如说TreeSet中的比较器,TreeSet<T> ts = new TreeSet<>(new Comparator<T>(){});  怎么传进来的

作者: 月下樱    时间: 2016-11-3 00:06
这是两个匿名内部类嵌套吧

作者: 土豆v    时间: 2016-11-3 00:29
多看几遍视频多看几遍视频

作者: weiwenhuaming    时间: 2016-11-3 06:39
子类对象


作者: Tyoo    时间: 2016-11-3 13:54
匿名内部类用得不多吧,我们老师说开发中不建议使用,使用频率比较少。匿名内部类就记住他的格式new class/interface() {} ,主要是省代码,而且不用重复使用这个类的时候应用。
作者: Tyoo    时间: 2016-11-3 14:01
张弗睿 发表于 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
张弗睿 发表于 2016-11-2 23:36
那当做参数传递又是什么鬼?比如说TreeSet中的比较器,TreeSet ts = new TreeSet(new Comparator(){});  怎 ...

其实你可以把它拆开,这样写只是方便而已,直接重写方法。少定义了一个变量。你搞个子类重写方法,创建子类对象。就是父类引用指向子类对象。多态的表现形式





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