黑马程序员技术交流社区

标题: 匿名内部类的问题 [打印本页]

作者: 一直有你    时间: 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