黑马程序员技术交流社区
标题:
匿名内部类的问题
[打印本页]
作者:
一直有你
时间:
2013-8-4 16:09
标题:
匿名内部类的问题
本帖最后由 杨兴庭 于 2013-8-5 18:44 编辑
今天学IO流的时候,毕老师用到了匿名内部类,虽说我知道匿名内部类是怎么回事?但是我想请问大家在什么情况下一般会使用到匿名内部类?请大家系统的给说一下。谢谢啦!
作者:
wang100753
时间:
2013-8-4 16:37
1:匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句, ( new <类或接口> <类的主体> ) 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
2.匿名内部类的注意事项
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
·内部类只能访问外部类的静态变量或静态方法。
3.匿名内部类的作用
Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。
作者:
一个铃,一颗珠
时间:
2013-8-4 21:33
匿名内部类首先是一个类的内部定义的,是用来帮助你这个外部类去更好的实现一些功能,主要用在向方法传递一个对象做为参数。
public void fun(new Person{
System.out.println("你好");
});
向方法传了一个person的对象。Person是外部类,匿名类只是一个类体,这个类体创建的对象上转型为Person的对象了。
作者:
hoyouly
时间:
2013-8-5 08:03
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提: 内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象。(是把定义类和建立对象封装在一起的表现形式)可以理解为带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。匿名调用方法方便些??
作者:
taotao
时间:
2013-8-5 08:48
为什么大家都不理解楼主的意思呢?楼主对匿名内部类的构成是知道的,他只是想知道的是什么时候用匿名内部类!
如果你的需求是这样的:定义一个类(当然,此类需要继承某个类或实现某个接口),而这个类在整个程序中只用了一次(即只创建一次对象,对象大多时候也只做了一件事,比如返回一个值或调用一个方法),这个时候就没必要单独把这个类定义出来了,所以用匿名内部类。
需要注意的是,符合定义为匿名类条件的类,并不一定要这么定义,因为单独定义类能更好的体现一些关系。比如我们现在写的小实例都很简单,一个类也就实现那么一点功能,这样也把它定义成匿名内部类得话,你看了多难过O(∩_∩)O~
作者:
薛鹏鹏
时间:
2013-8-5 09:20
使用匿名内部类的场景:
1.当函数参数是接口类型时,而且接口中的方法不超过三个。
2.可以用匿名内部类作为实际参数进行传递
作者:
心灵之歌
时间:
2013-8-5 10:16
当一个事物在另一个事物内部的时候,就可以用到匿名内部类。这样定义的好处是,访问方便!
作者:
黑马龙子
时间:
2013-8-6 12:51
匿名内部类是内部类的一种特殊情况。它只有一个实例,而且没有引用。一般在能用内部类实现,但是实例只用一次的情况下使用它(可以减少资源开销);匿名类是内部类的一个实例,一般用在只需要使用到一次,而且是实例的情况下,且不区分static和非static。一般在一下几种情况下使用:
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(一般是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·匿名内部类不能是public,protected,private,static。
·只能创建匿名内部类的一个实例。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2