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

div*_*er 0 java inheritance anonymous-class

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();

}}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*iel 5

该代码中存在关于“内部类”和“匿名类”的混淆。

请注意,那里有 3 个课程:

  • Child
  • Hello
  • Hello$1:在其内部声明的匿名类Hello,其父类是Child

代码中的混乱在于后者:

  • Hello$1是一个子类Child
  • Hello$1是一个内部类Hello

这意味着:

  • Hello$1无法访问 的私有字段Child,因为子类无法访问其超类的私有元素
  • Hello$1可以从 访问私有字段Hello,因为匿名内部类可以访问其封闭类的私有元素

在这段代码中检查得更清楚:

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
            }
        };
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 哦,非常感谢兄弟,我完全误解了它,, (2认同)