假设以下类结构:
命名空间a内
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 建议我
Change the visibility of 'action' to 'protected'
我感觉自己被愚弄了。
为什么我可以执行操作,但不能调用它?我访问 someVal
也没有问题。
我很清楚将 B
复制到同一个命名空间中,但我有许多扩展 B 或类似的 C 和 D 等的类,并且喜欢按顺序排列它们。
或者重新表述我的问题: 这个数据包“东西”是强制我的类具有 protected 方法但对客户端代码隐藏该方法的唯一方法吗?
最佳答案
从静态类型的角度来看,a
可能不是 B
的实例。您不能触及非后代类的 protected (除非通过相同的包退出)。 protected
应该很少使用(如果有的话)。
关于java - 为什么java不让我调用这个 protected 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410629/