匿名内部类只能访问final局部变量,但可以访问外部类的普通成员变量。
public class InnerClass {
public static void main(String[] args) {
Outer o = new Outer();
Inner i = o.method(1);
i.print();
}
}
class Outer{
private int i = 1;
public Inner method(final int j){
return new Inner(){
public void print(){
i++; // i的值可以改变,但j不可以
System.out.println("i=" + i + ",j=" + j);
}
};
}
}
interface Inner{
void print();
}
如同method()方法中的变量j所示,必须是final,如果不写,JDK1.8中会隐式的声明为final,依然不可改变其值。而外部类的成员变量却不受此限制。