我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合公式 > 方法内部类 >

为什么匿名内部类和局部内部类只能访问final变量?

归档日期:04-20       文本归类:方法内部类      文章编辑:爱尚语录

  1、因为局部内部类或匿名内部类的对象可以被外部方法作为返回值,返回到方法外使用,那么如果这样的话,就会出现矛盾。

  //这里method()已经结束,按理说局部a早就失效,那么下面调用change(),

  在java中,类是封装的,内部类也不例外。我们知道,非静态内部类能够访问外部类成员是因为它持有外部类对象的引用 Outer.this, 就像子类对像能够访问父类成员是持有父类对象引用super一样。局部内部类也和一般内部类一样,只持有了Outer.this,能够访问外部类成员,但是它又是如何访问到局部变量的呢?

  实际上java是将局部变量作为参数传给了局部内部类的构造函数,而将其作为内部类的成员属性封装在了类中。我们看到的内部类访问局部变量实际上只是访问了自己的成员属性而已,这和类的封装性是一致的。那么上面的代码实际上是这样:

  //而是Inner内部类的成员变量a,只是它的值是method()的局部变量a的副本

  method()方法的局部变量a失效了,但其实change()方法已经访问的不是method()方法的局部变量a了,而是Inner内部类的成员变量a。

  为了保证阅读与运行的一致性,只能规定局部变量a(和副本a)不能修改,这样阅读和运行就可保持一致。那么就只能限定a为final。

本文链接:http://renfriends.com/fangfanabulei/109.html