java - super 关键字是否应该访问私有(private)字段和方法。我能够访问私有(private)方法和字段

标签 java

我有两个内部类A,B,B是A的子类。我正在尝试访问 使用 super 关键字从 B 获取 A 的私有(private)方法和字段,我得到了输出。但 super 关键字应该限制对私有(private)字段和方法的访问。 这种行为的原因是什么?

public class C
{
    public static class A 
    {
        private int a = 10;

        private void hello()
        {
            System.out.println("hello"); 
        }
    }

    public static class B extends A
    {   
        B() 
        {
            super.hello();
            System.out.println(super.a);
        }
    }

    public static void main(String[] args)
    {
        B b = new B();      
    }
}

输出:

10
hello 

最佳答案

B 可以访问 A 的私有(private)成员,因为 BA 都是嵌套类 C,不是因为 BA 的子类。

访问规则不关心如何获取引用,只关心代码是否位于允许访问的上下文中。例如。如果将 A 引用传递给 B 方法,则它可以访问私有(private)成员。在您的情况下,thissuper 都是对 A 的(隐式)引用。

子类无权访问其父类(super class)的私有(private)成员。

关于java - super 关键字是否应该访问私有(private)字段和方法。我能够访问私有(private)方法和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560835/

相关文章:

java - 无法写入文件 - 为什么?

java - LibGDX Actor 不会绘制 Action

java - JAXB 编码到 HTML 在 xsl :when using <a> tag 中引发异常

java - iText 未生成预期的 PDF 格式

java - 整数数组中重复值的数量

java map 删除意外行为

java - Setter 没有为 java 对象设置值

java - 监视通过 JNI 用 Ja​​va 调用的 C DLL 的内存使用情况?

java - 无法从主包 (Eclipse) 访问测试包中的类

java - 如何调试堆栈跟踪未引用我的类的 NullPointerException?