匿名内部类为什么用final 内部类和匿名内部类是什么?有什么作用?
内部类和匿名内部类是什么?有什么作用?
1. 内部类:内部类是在另一个类中定义的类。使用它有三个主要原因:内部类方法可以访问类定义范围内的数据,包括私有数据。内部类可以对同一包中的其他类隐藏。当您想定义回调函数而不想编写大量代码时,使用匿名内部类是很方便的。
2. 局部内部类:在讨论匿名内部类之前,让我们先看一下在方法中定义的局部内部类。不能使用公共或私有访问说明符声明本地内部类。它的作用域仅限于声明局部内部类的块。局部内部类可以对外部世界完全隐藏。局部内部类不仅可以访问它们的外围类,还可以访问局部变量。但是,这些局部变量必须声明为final,如上面代码中start()方法的参数beep所示。
3. 匿名内部类修改上面本地内部类的代码,以定义一个没有类名的匿名内部类。除了内部类的优点外,匿名内部类还可以减少代码量。
匿名内部类访问局部变量,为什么final?
这是变量范围的问题,因为匿名内部类出现在方法中。如果要访问方法的参数或方法中定义的变量,则必须将这些参数和变量修改为final。
尽管匿名内部类在方法内部,但内部类被编译为外部。内部这意味着内部类的位置和外部类中的方法处于同一级别。外部类中方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域仅在方法内部有效。由于内部类和方法在编译时处于同一级别,因此只有在方法中的变量或参数是final时才能引用内部类。
匿名内部类访问局部变量为什么final?
确保不会在匿名内部类内部或外部修改局部变量。因为匿名内部类实际上复制了一个局部变量并在匿名内部类中使用它。如果未设置为final,则局部变量将被外部修改,这将导致与匿名内部类中的副本不一致,这在逻辑上是不合理的。所以Java虚拟机就是这样设计的,强制局部变量是final,这在语义上是一致的。
匿名内部类为什么用final 内部类的变量为什么要用final 内部类可以是final类吗
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。