java - 为什么java不让我调用这个 protected 函数

标签 java syntax methods protected

假设以下类结构:

命名空间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/

相关文章:

java - 将方法参数传递给java中byte,int,int类型的方法参数

java - 使用 ImageJ 库 (Java) 增加图像对比度

java - Vaadin 8 使用 Enum 类创建树

java - 实例方法 equals()

python - 如何将值与反斜杠进行比较?

ios - 无法执行命令 : Killed

java - 方法调用和类中的类

java - 如何在java中检查密码是否是BCrypt编码的

java - JBoss 5.1.0GA : "java.lang.IllegalStateException: Null beanMetaData" and "java.lang.RuntimeException: failed to initialize bean container"

php - 使用 JOINING 表创建 mysql 查询语法