如何从内部类方法访问局部变量?

时间:2017-10-22 12:50:10

标签: java

我无法从内部类方法访问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.
            }
        }
    }
}

3 个答案:

答案 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,如果要将它与原始类进行比较,该怎么办?