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

如何强制对super方法进行多态调用?

盖诚
2023-03-14
问题内容

我有一个初始化方法,该方法在广泛的层次结构中使用和覆盖。但是,每个init调用都继承了先前的工作。很自然,我会:

@Override public void init() {
   super.init();
}

当然,这将确保所有内容都被调用并实例化。我想知道的是:我可以创建一种方法来确保调用super方法吗?如果所有init都没有被调用,那么对象中会发生故障,因此如果有人忘记了调用,我想抛出异常或错误super

TYFT〜伊顿


问题答案:

如果派生类无法调用超类,这是引发异常的一种方法:

public class Base {
    private boolean called;
    public Base() { // doesn't have to be the c'tor; works elsewhere as well
        called = false;
        init();
        if (!called) {
            // throw an exception
        }
    }
    protected void init() {
        called = true;
        // other stuff
    }
}


 类似资料:
  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?

  • 问题内容: 下面的代码在运行时显然会打印出“ B1 / A2 / B2”。现在,是否可以改为打印“ A1 / A2 / B2”(即A#method2()应该在A而不是B上调用method1())? 注意:我不需要获得传递多态性,这个问题仅出于好奇。 问题答案: 是的,您可以做到。在包 a中 定义A : 在包 b中 定义B : 将测试放入软件包 a中 并运行它。结果是A1 / A2 / B2。当然这

  • 问题内容: 我正在扩展一个类并覆盖一个方法。我要做的只是调用super,但是调用了一个经过修改的参数,该参数被其方法之一拦截。一个例子使它更加清楚: 我宁愿使用不需要自己的编译器的工具。最佳选择是什么? 问题答案: 鉴于这是一个接口,您可以考虑使用动态代理,该代理将: 包装原始foo 拦截所有消息并将其转发给原始foo 上面的链接中有一个完整的示例。这只是想法: 请注意,如果不是接口,您仍可以手动

  • 问题内容: 我有多个正在运行的线程,这些线程访问单例对象并调用其方法并在其中传递对象。在该方法中,我仅对接收到的对象进行一些计算。我听说在这种情况下不会有任何问题,因为它是无状态的并且对所有人都是免费的。 我的问题是,它对所有人免费吗?我想知道多个线程如何在自己的线程中调用共享方法而不覆盖其他线程的传递对象吗?请在内存分配方面和堆栈级别进行解释。 问题答案: 我认为您必须区分已经存储在内存和代码执

  • 问题内容: 我希望下面的gulp调用一个接一个地同步运行。但是他们不服从命令。 在运行序列节点模块没有帮助在这里,因为我并不想串联运行一饮而尽任务(即它的语法类似于等等),而是吞掉串联“来电”,你见下文。 如何使它们一个接一个地运行? 问题答案: 您可以将 异步 用作呼叫的控制流,以仅使它们完成一个任务,也避免了获得“金字塔效应”。因此,这样的事情对于您的用例应该是好的: 这还将使您能够进行一些错

  • 我想强制我的抽象类孩子实现我的抽象方法为私有。这可能吗?