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

时间:2015-07-07 08:55:13

标签: java inheritance classloader

所以,我们有

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保护,并且{ {1}}扩展C,它还应该可以访问A

2 个答案:

答案 0 :(得分:3)

protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问。

如果要访问B.f(),则应在与B相同的包中定义C类。

答案 1 :(得分:0)

否,因为编译器不知道bBC或其他外部类的实例。

假设有一个类D,在另一个包中有D extends A。如果bD的实例(编译器不知道),则b.f()如果访问权限为protected则禁止{{1}}(无法通过类访问{{1}}其他包)。

相关问题