首先匿名内部类能访问的变量有以下3种:
1.实例变量
2.局部变量
3.外部类的方法参数
需要知道,访问1时不需要final修饰,而访问2、3时需要用final修饰。jdk1.8之后,不需要手动加final修饰符,
编译时底层会自动加上final。
那么为什么要加 final 呢?在这里先了解原因,具体为什么下文会解释。原因:需要保护数据的一致性。
public class OutClass {
String str1 = "str1";//实例变量
//num为外部类的方法参数
public void test(int num) {
String str2 = "str2";//成员变量
Inner inner = new Inner(){
void test1(){
str1 = "s1";