Java 对父方法的内部类方法访问';s变量

Java 对父方法的内部类方法访问';s变量,java,Java,为什么方法r不能访问变量c?我知道它无法访问变量,但我正在试图理解它为什么不能访问 public class A { public void m() { class B implements I { public void r() { . . . } } final int c; . . . } } 因为c是一个局部变量,并且在声明局部类B时不在范围内 如果您在类的声明之前声明了它,并且正确地初始化了它,那么您可以

为什么方法r不能访问变量c?我知道它无法访问变量,但我正在试图理解它为什么不能访问

public class A {
  public void m() {
    class B implements I {
      public void r() {
        . . .
      }
    }
    final int c;
    . . .
  }
}

因为
c
是一个局部变量,并且在声明局部类
B
时不在范围内

如果您在类的声明之前声明了它,并且正确地初始化了它,那么您可以使用它

class A {
    public void m() {
        final int c = 42;

        class B implements I {
            public void r() {
                System.out.println(c);
            }
        }
    }
}

代码中有两个问题:

  • 变量
    c
    为最终变量,但未指定值。声明时必须将其设置为某个值
  • 如果要从方法
    r()
    访问
    c
    ,则必须首先声明它,也就是说,在声明方法
    r()
    之前

  • 解决这一问题的最简单方法是将变量
    c
    移动到
    A
    类,而不是在类
    B
    中声明它,这实际上编译了吗?我不知道你可以在方法中嵌套内部类。让我找到文档化的信息也可以。还有两种类型的内部类。可以在方法体中声明内部类我在课堂上的一个家庭作业中提到了这个问题,这应该是对内部课堂的有效使用。我只是想弄清楚这个内部类如何不能访问变量c。我想这用你的陈述回答了这个问题。我并没有试图修复代码,而是在寻找这样做不起作用的原因。编译时,编辑器抛出“找不到符号-变量c”。因此,范围是有意义的。谢谢