interface prin{
public void write();
}
public class tt {
static int xx=123;
public static void main(String[] args){
final String ss="lrui";
new prin(){
public void write(){
xx++;
System.out.println(xx);
}
}.write();
System.out.println(xx);
}
}
output
124
124
匿名内部类对于外围类的变量是可以直接用的(不要求final),而且在内部类中改变了变量,外围类的变量也会改变,其原因是:内部类持有外围类的指针通过指针来引用外围类对象。而其余位置例如上面代码中的final String ss="lrui";
是通过该在内部类中创建一个副本的方式来引用。所以为了防止在类内部改变了变量ss而外围类却没改变这种令人迷惑的情况,所以强制为final是起不能改变。