无法从子 class 访问受保护的方法

Can't access protected method from child class

所以,我们有

public abstract class A{
    protected abstract String f();
}

public class B extends A{
     protected String f(){...}
}

public class C extends A{
    protected String f(){
         A b = (A) Class.forName("B", true, getClass().getClassLoader()).newInstance();
         return b.f();
}

这不允许我访问 b.f(),说 B.f() 在受保护范围内,但是 fA 保护,并且由于 C 扩展了 A,它也应该可以访问 f().

否,因为编译器不知道 b 是否是 BC 或其他外部 classes.

的实例

假设有一个 class D 使得 D extends A 在另一个包中。如果 bD 的实例(编译器不知道) 如果访问是 protected (不能被 [=23= 访问), b.f() 应该被禁止]es 在其他包中)。

protected 修饰符指定该成员只能在其自己的包内访问(与 package-private 一样),此外,它的 class 在另一个包中的子class .

如果您想访问 B.f(),您应该将 C class 定义在与 B 相同的包中。