A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近刚学到内部类,老毕在视频里提到,内部类如果定义在局部(外部类的方法中),这个内部类仍然可以访问外部类的成员,但是如果要访问这个内部类所在的局部中的成员,那么这个成员必须用final修饰。但是我自己写的代码中,这个内部类也可以访问没有加final修饰的成员,有没有人来解答一下为什么?

  1. class out{
  2.         int x = 1;
  3.         void method(int a){
  4.                 int y =2;
  5.                 class inner{
  6.                         void function(){
  7.                                 System.out.print(a);
  8.                         }
  9.                 }
  10.                 new inner().function();
  11.         }       
  12. }

  13. class InnerClassDemo{
  14.         public static void main(String[] args){
  15.                 new out().method(4);
  16.         }
  17. }
复制代码

1 个回复

倒序浏览
好像没人回答,我自己来答好了。
JAVA 8定义了一个功能,称之为“effectively final”,他的作用是对于被匿名内部类访问的局部变量,可以不用final来修饰。但必须按照有final修饰的方式来使用。也就是其值不能再被更改。如果仅仅是读取值或者输出,即使不用final也不会报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马