黑马程序员技术交流社区
标题:
该如何理解匿名内部类的功能?
[打印本页]
作者:
tonygone
时间:
2013-7-17 14:18
标题:
该如何理解匿名内部类的功能?
本帖最后由 tonygone 于 2013-7-18 08:11 编辑
可不可以理解为没有构造器的特殊局部内部类,主要是用来临时扩充父类的功能,还可以当父类对象用?
作者:
张先庆
时间:
2013-7-17 21:45
匿名内部类的特点:1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。2,只是为了获得一个对象实例,不需要知道其实际类型。3,类名没有意义,也就是不需要使用到。
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
作者:
云游天下
时间:
2013-7-17 22:27
楼上答的就挺全的 我再补充一下吧
你要去理解什么是内部类,内部类的作用,java的多态,什么是回调函数。匿名内部类是当做函数的参数传递给方法的,在这个方法中,会用接口类型接受传入的匿名类,然后调用其方法,这是多态。原理其实是实现了回调。因为他会调用你匿名内部类中的方法。给你举个例子:
手敲的代码,未经测试
interface InterfaceA{
String go();
}
class Test(){
public void prtGo(InterfaceA ia){
System.out.println(ia.o());
}
public static void main(String []args){
Test t = new Test();
t.prtGo(new InterfaceA(){
public String go(){
return "go";
}
});
}}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2