我无法从内部类方法访问var
变量。但是java正在访问类变量而不是局部变量。如何从内部类方法访问局部变量而不是类变量?
class Foo {
void test() {
int var = 3;
class Inner {
int var = 1;
void print_var_of_test() {
System.out.println(var); // this line prints 1 why ?
// I want this line to print var of test (3) function.
}
}
}
}
答案 0 :(得分:2)
如果内部类已经定义了一个具有相同名称的变量,则无法从内部类访问外部类方法中定义的局部变量。
您可以使用不同的名称来区分它们。
作为保持相同变量名称的变通方法,您可以更改print_var_of_test()
的签名以接受int
。
这样,在内部类之外,您可以在调用方法时传递int var
变量。
class Foo {
void test() {
int var = 3;
class Inner {
int var = 1;
void print_var_of_test(int var) {
System.out.println("outer var=" + var);
System.out.println("inner var=" + this.var);
}
}
Inner inner = new Inner();
inner.print_var_of_test(var);
}
}
答案 1 :(得分:1)
您可以通过为局部变量或内部类变量选择另一个名称来实现。
由于内部类和方法变量是在同一个源方法中定义的,因此您应该始终能够更改其中一个。从来没有一种情况下你没有权限/权限/能力来改变一个而不是另一个。
答案 2 :(得分:0)
如果要将内部类var命名为varInner,如果要将它与原始类进行比较,该怎么办?