Java 超级关键字是否应该访问私有字段和方法。我能够访问私有方法和字段

Java 超级关键字是否应该访问私有字段和方法。我能够访问私有方法和字段,java,Java,我有两个内部类A,B和B是A的一个子类。我试图访问 使用super关键字从B获取A的私有方法和字段,我将获得输出。但是super关键字应该限制对私有字段和方法的访问。 这种行为的原因是什么 public class C { public static class A { private int a = 10; private void hello() { System.out.println("hello

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

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
的私有成员,因为
B
A
都是
C
嵌套类,而不是因为
B
A
的子类

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

子类无权访问其超类的私有成员。

这里说明:

类从其直接超类和直接超接口继承 超类和超接口的所有非私有字段 都可以被类中的代码访问,而不被 课堂上的声明

子类可以访问超类的私有字段- 例如,如果两个类都是同一个类的成员。 然而,私有字段永远不会被子类继承。

这意味着私有字段和方法不是继承的,而是对其他类可见的,因为它们在同一个类中。例如,以下内容也可以:

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

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

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

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

它在同一个编译单元(同一个“文件”)中,因此可以访问私有字段和方法。我对java一无所知,但为了让其他人更清楚地了解这个问题:输出是什么(你是指编译器警告/错误吗?),到底什么让你困惑?寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。使用“编辑”链接改进您的问题-不要通过评论添加更多信息。谢谢我的困惑是“为什么可以访问私有字段和方法?”。我以为会出错。希望它能澄清。谢谢,我想B不是A的内部阶级。这两个都是C的内部类。希望我没有错。一旦你通过考试,请纠正我code@Kranthi是的,问题代码的错误缩进让我误读了,这很有用。非常感谢。