从不同包的另一个实例的子类调用受保护的方法

我想从提供此受保护方法的类的子类中调用另一个实例的受保护方法.请参阅以下示例:

I want to invoke a protected method of another instance from within a subclass of the class providing this protected method. See the following example:

public class Nano {

    protected void computeSize() {
    }

}

public class NanoContainer extends Nano {

    protected ArrayList<Nano> children;

}

public class SomeOtherNode extends NanoContainer {

    // {Nano} Overrides

    protected void computeSize() {
        for (Nano child: children) {
            child.computeSize();            // << computeSize() has protected access in nanolay.Nano
        }
    }

}

javac 告诉我 computeSize() 在 Nano 中具有受保护的访问权限.我看不出这是什么原因(我以为我已经在其他代码中这样做了).我想保持这种方法受到保护,我该怎么办?

javac tells me that computeSize() has protected access in Nano. I can't see the reason for this (I thought I was already doing this in some other code). I'd like to keep this method being protected, what can I do?

javac version "1.7.0_09"

编辑

我想提供一个精简的版本,但我没有想到这些类位于不同的包中.

Edit

I wanted to provide a stripped down version, but I didn't think about the fact, that the classes lie in different packages.

nanolay.Node
nanolay.NanoContainer
nanogui.SomeOtherNode

推荐答案

您可以通过子类化和覆盖来访问受保护的方法;当它们在同一个包中可用时.我会补充一些细节.您可以在此处阅读详细信息.

You could access the protected methods either by subclassing and overriding; also when they are available in the same package. I will add some details. You can read details here.

您的示例位于 java 中 Object 类中可用的 protected clone() 方法的行上;您不能直接在任何对象上调用它(尽管所有对象都隐式地从 Object 类扩展).

The example that you have is on lines of the protected clone() method available in the Object class in java; you cannot directly call it on any object (although all object implicitly extend from the Object class).

相关文章