java,继承 - 父级中的私有字段是通过child中的公共方法访问的

1 java inheritance private public

所以,有一位朋友给我发了这个代码并说它已成功编译并返回42.但是,令人困扰的是父类中的方法"返回"42是私有的,并且被调用的方法是在子类中,它是公开的.那么,任何人都能说出为什么以及如何运作?

static class A {
    private int f() {
        return 42;
    }
}

static class B extends A {
    public int f2() {
        return super.f();
    }
}

public static void main(String[] args) {
    System.out.print(new B().f2());

}
Run Code Online (Sandbox Code Playgroud)

它返回42.

我试图摆脱静电,而且

class A {
    private int f() {
        return 42;
    }
}

class B extends A {
    public int f2() {
        return super.f();
    }
}

public static void main(String[] args) {
    Main m= new Main();
    B b= m.new B();
    System.out.print(b.f2());

}
Run Code Online (Sandbox Code Playgroud)

它仍然返回42.

Kon*_*kov 6

由于两个类(AB)都嵌套在一起Main,因此可以访问该private int f()方法.

如果提取的来源A,并B在顶级类,这将不会发生,你会编译失败.