我有两个内部类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)成员,因为 B
和 A
都是嵌套类 C
,不是因为 B
是 A
的子类。
访问规则不关心如何获取引用,只关心代码是否位于允许访问的上下文中。例如。如果将 A
引用传递给 B
方法,则它可以访问私有(private)成员。在您的情况下,this
和 super
都是对 A
的(隐式)引用。
子类无权访问其父类(super class)的私有(private)成员。
关于java - super 关键字是否应该访问私有(private)字段和方法。我能够访问私有(private)方法和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560835/