黑马程序员技术交流社区

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

作者: 李节起    时间: 2012-4-7 23:35
标题: java匿名内部类
毕老师课件中讲到:“不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。”

为什么匿名内部类在使用一个外部定义的对象时要求这个参数引用是final的?
作者: 秦岩    时间: 2012-4-7 23:43
本帖最后由 秦岩 于 2012-4-7 23:48 编辑
  1. 原因如下:

  2. abstract class ABSClass{
  3. public abstract void print();
  4. }

  5. public class Test2{
  6. public static void test(final String s){//一旦参数在匿名类内部使用,则必须是final
  7. ABSClass c=new ABSClass(){
  8. public void print(){
  9. System.out.println(s);
  10. }
  11. };
  12. c.print();
  13. }
  14. public static void main(String[] args){
  15. test("Hello World!");
  16. }
  17. }
复制代码
1. 匿名内部类可以使用外部类的变量(局部或成员变来那个)
2. 匿名内部类中不同的方法可以共享这些变量
根据这两点信息我们就可以分析,可能这些变量会在匿名内部类的字段中保存着,并且在构造的时候将他们的值/引用传入内部类。这样就可以保证同时实现上述两点了。
事实上,Java就是这样设计的,并且所谓匿名类,其实并不是匿名的,只是编译器帮我们命名了而已
Java对匿名内部类的实现是通过编译器来支持的,即通过编译器帮我们产生一个匿名类的类名,将所有在匿名类中用到的局部变量和参数做为内部类的final字段,同是内部类还会引用外部类的实例
作者: pray    时间: 2014-4-26 04:49
楼主工作顺利,继往开来!




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