package priv.stedeshain.innerclass;
class Obj {
int i;
public Obj(int i) {
this.i = i;
}
public String getValue() {
return Integer.toString(i);
}
}
interface U {
void a();
}
class A {
Obj var;
public A(Obj a) {
this.var = a;
}
public U getU() {
return new U() {
@Override
public void a() {
System.out.println("A(" + this + ") var=" + var.getValue() + "(" + var + ") is calling method a()");
System.out.println();
}
};
}
}
public class Practice23 {
public static void main(String[] args) {
A a = new A(new Obj(1));
U u = a.getU();
u.a();
a.var = new Obj(199999);
System.out.println("a.var = new Obj(199999)");
U u2 = a.getU();
u2.a();
u.a();
}
}
代码里,内部类成功访问到了外部类的非 final 成员(是实质上的非 final 成员,在后面的代码里甚至还修改了该成员指向的对象)
但是这种行为不是不被允许的吗?
这是执行结果:
望有人为我解惑