我知道这个论坛之前有人问过这个问题,但我会再问一次,因为我没有看到任何好的答案(到目前为止)。
这里是:
package a;
public class A{
protected int a;
}
package b;
public class B extends A{
}
package c;
public class C extends B{
public void accessField(){
A ancient = new A();
ancient.a = 2; //A - That wouldn't work.
a = 2; //B - That works.
}
}
为什么条款 A) 不起作用?对子类 C 中父类(super class)对象古代访问的这种限制背后的合理性是什么?
谢谢。
最佳答案
protected 成员只能在同一个包之外访问,如果它是通过继承 - 即在层次结构内访问。
因此,当您从不同的包创建 A 的另一个实例时,这不是继承关系,因此会失败。
一如既往,这在 JLS 6.6.2 中有所介绍:
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.
关于Java : Protected access restriction for subclass on superclass object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799709/