看,PlanetShape扩展了Shape! 然而它说isOverlapMethodLevel在Shape中具有受保护的访问权限!
我刚刚在android studio中发现了一个错误吗?还是别的什么?
答案 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
}
}
在第二个示例中,由于您未通过继承访问受保护的方法而出现错误,您只是尝试从实例中访问受保护的成员函数另一个包。