为什么匿名class不能访问私有方法和变量?

Why anonymous class can't access private methods and variables?

package demo;

class Child{
    private static int a=50;
    public void fin() {
        System.out.println("hello");
    }
    private void fly() {
        System.out.println("lol");
    }
}

public class Hello {
    public static void main(String[] args) 
    {  
        Child c=new Child() {

            public void f() {
                System.out.println("sorry"+a);
            }
            public void fin() {
                System.out.println("hello");

            }

        };
        c.fin();

}}

以上是 java 的代码 我的观点是为什么不能在匿名 class 中调用私有方法和变量,因为我在某处读到匿名 class 可以访问所有成员封闭的 class.
https://www.baeldung.com/java-anonymous-classes go checkout 指定匿名 class 的每个成员都可以访问封闭的 class.

的所有成员

关于 "inner class" 和 "anonymous class" 的代码存在混淆。

注意你有 3 个 class:

  • Child
  • Hello
  • Hello:在 Hello 内部声明的匿名 class,其父级是 Child

代码中的混淆是关于后者的:

  • HelloChild
  • 的子class
  • HelloHello
  • 的内部 class

这意味着:

  • Hello 无法从 Child 访问私有字段,因为 subclasses 无法访问其 super classes
  • 的私有元素
  • Hello 可以从 Hello 访问私有字段,因为匿名内部 classes 可以访问其封闭 classes
  • 的私有元素

这段代码看的更清楚:

class Child {
    private int a = 50;
}

public class Hello {
    private int b = 60;

    public void f() 
    {  
        Child c = new Child() {
            public void f() {
                // System.out.println("a = " + a); // This won't compile
                System.out.println("b = " + b); // This compiles OK
            }
        };
    }
}

i had read somewhere that anonymous class can access all members of enclosed class.

我假设你的意思是封闭 class 是的。但是 Child 不是封闭的 class 它是父级 class。在你的情况下封闭 class 将是 Hello.class 如果你添加它 private static int a; 即:

public class Hello {
    private static int a = 40;
...

它会起作用。

您匿名覆盖 class 的事实与情况无关紧要。 class 无法访问其父项的 private 成员。如果您想访问父级的成员,您可以使用 protected 或默认可见性来定义它们。