android studio中的错误?无法访问子类中的受保护成员

时间:2018-05-20 22:33:20

标签: java android android-studio

看,PlanetShape扩展了Shape! Look, PlanetShape extends Shape! 然而它说isOverlapMethodLevel在Shape中具有受保护的访问权限! And yet it says isOverlapMethodLevel have protected access in Shape!

我刚刚在android studio中发现了一个错误吗?还是别的什么?

1 个答案:

答案 0 :(得分:3)

这个包在你的类层次结构中有所不同 - 特别是你的PlanetShape类与它扩展的类不同。

直接来自Java documentation:(强调我的)

  

受保护的修饰符指定只能访问成员   在自己的包中(与package-private一样),另外,通过   另一个包中其类的子类。

显然,#34; 由其类的子类在另一个包中"似乎是一些混乱的原因,我同意措辞相当模糊。

基本上,他们 试图说 的是你可以这样做:

public class PlanetShape extends Shape {
    aMethod() {
        // call the protected method declared in the Super class (ok)
        doProtectedMethodOfShape();
    }    
}

但是 这个:

public class PlanetShape extends Shape {
    aMethod() {
        Shape s = new Shape();
        s.doProtectedMethodOfShape(); // error here
    }    
}

在第二个示例中,由于您未通过继承访问受保护的方法而出现错误,您只是尝试从实例中访问受保护的成员函数另一个包。