Java : Protected access restriction for subclass on superclass object

标签 java

我知道这个论坛之前有人问过这个问题,但我会再问一次,因为我没有看到任何好的答案(到目前为止)。

这里是:

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/

相关文章:

java - 如何使用 for-each 循环创建一个类(不是集合的后代) "compatible"?

Java网络: how to simulate two different computers?

database - 连接数据库的有效方式(按性能)

java - 抽象 compareTo 方法未被覆盖

java - 函数未正确返回数字

java - 无法获取数组中的其余数字。 java

java - spring mvc 3.0之后没有改变重定向url

java - 获取与特定组或上下文相关的 Json 属性

java - 使用 bufferedreader 读取 LocalDate - java

java - 收到<Identifier>预期错误并且不知道为什么