输出
foo
foo
但我期待它
foo
bar
foo
我不知道为什么内部阶级不起作用
class Test {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
};
System.out.println(foo);
}
}
public class Main {
public static void main(String[] args){
Test t=new Test();
t.method();
}
}
答案 0 :(得分:0)
输出实际上是:
FOO
巴尔
巴尔
如果在创建匿名类后正确调用bar()函数:
class Test {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo);
}
}.bar(); // Added invocation here
System.out.println(foo);
}
}
public class Main {
public static void main(String[] args) {
Test t = new Test();
t.method();
}
}
答案 1 :(得分:0)
没有调用匿名Object类的方法bar()
。这就是为什么它里面的print语句永远不会执行的原因。
您可以按如下方式更新代码:
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
}.bar();
调用bar
方法。
现在您已经执行了将实例变量foo
分配给值"barr"
的方法,方法()中的最后一个print语句将打印更新后的值"barr"
。
答案 2 :(得分:0)
它会影响外部成员,但是必须执行在成员变量中进行更改的代码,因此您的代码应该是这样的:
public class Main {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "bar";
System.out.println(foo);
}
}.bar();
System.out.println(foo);
}
public static void main(String[] args) {
Main t = new Main();
t.method();
}
}
输出:
foo
bar
bar