Java 超级关键字是否应该访问私有字段和方法。我能够访问私有方法和字段
我有两个内部类A,B和B是A的一个子类。我试图访问 使用super关键字从B获取A的私有方法和字段,我将获得输出。但是super关键字应该限制对私有字段和方法的访问。 这种行为的原因是什么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
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是的,问题代码的错误缩进让我误读了,这很有用。非常感谢。