当前位置: 首页 > 面试题库 >

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

公冶威
2023-03-14
问题内容

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

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() has protected access in Nano。我看不到这的原因(我以为我已经在其他代码中这样做了)。我想保持此方法的保护,我该怎么办?

javac version "1.7.0_09"

编辑

我想提供一个简化的版本,但我没有想到事实是,这些类位于不同的程序包中。

nanolay.Node
nanolay.NanoContainer
nanogui.SomeOtherNode

问题答案:

您可以通过子类化和重写来访问受保护的方法。当它们在同一包装中时也是如此。我将添加一些细节。您可以在此处阅读详细信息。

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



 类似资料:
  • 问题内容: 假设存在以下基类: 同样,在同一个程序包中,有一个继承的类: 然后,另一个包中有第三类: 最后,还有一个实现类,同样在另一个包中: 尽管继承,而且是,有以下错误: getHeight()在bg.svetlin.ui.controls.Control中已保护访问 我检查了我的进口货物是否正确。我正在使用NetBeans。 知道有什么问题吗?我认为即使孩子处于不同的包装中,孩子们也可以看到

  • 问题内容: 我遇到了一个奇怪的问题,我无法弄清楚在尝试插入程序时弹出的问题。另一个问题是我无法创建一个简单的测试用例,因为每次尝试都可以。我一定缺少一些并发症。但我会尽力清楚地描述这种情况,以防任何人熟悉。 我有一个称为Seed的基类,它是主应用程序的一部分,并由系统类加载器加载。我有一个包含Road类的插件,该类是Seed的子类。它是在运行时从单独的jar文件加载的。Road类引用字段Seed.

  • 问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。

  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 问题内容: 看起来很傻,但是我真的很困惑。请看下面的代码: 我已经从Oracle文档读取和在这里为好,即 protected成员在另一个包也子类可见 。因此fun()应该在第二包的子类中可见。那为什么会出错呢? 我是否非常想念一些非常明显的东西? 问题答案: 在Java语言规范说 可以从包的外部访问对象的受保护成员或构造函数,而在包中只能通过负责该对象实现的代码声明该对象。 这意味着,如果要在原始

  • 这是我遇到的一个奇怪的情况。我有一个定义受保护字段的抽象基类。还有一个修改字段的公共方法。然后,我有基类的一些子类使用字段。 我注意到,当我调用超类方法来修改字段时,对字段值的更改似乎不会“贯彻”到子类的实例中。 需要提到的另一件事是抽象类(以及它的子类)实现了。我不认为这会对我看到的东西有影响,但多线程不是我的专长。 抽象基类: 子类: 因此,当我最终调用方法时,线程中运行的子类实例不会从它的循