假设以下类结构:
在命名空间内
public abstract class A {
protected int someVal;
protected abstract int action();
}
命名空间a.b中的
public class B extends A{
//magically filled with elements ;)
List<A> elements;
protected int action(){
someVal = 42; // OK
int l = 0;
for (A a : elements){
l+= a.action(); //FORBIDDEN!!
}
return l;
}
}
所以Eclipse建议我
将'action'的可见性更改为'protected'
我觉得有些被骗了。
为什么我被允许实施行动,但不能打电话给它?访问someVal
也没问题。
我很清楚将B
复制到同一个命名空间中,但是我有很多类可以扩展B或类似的C和D等等,并且喜欢将它们按顺序排列。
或者重新解释我的问题: 这个数据包'thingy'是强制我的类拥有受保护方法的唯一方法,但是从客户端代码中隐藏它吗?
答案 0 :(得分:2)
从静态类型角度a
可能不是B
的实例。您无法触及非后代类的受保护(除非通过相同的包退出)。如果有的话,protected
应该很少使用。