【问题标题】:Base class referenced in stack trace line?堆栈跟踪行中引用的基类?
【发布时间】:2025-12-27 18:15:11
【问题描述】:

在调试 java 代码时,在堆栈跟踪中,我注意到以下内容

ToyotaCar(AbstractCar).handle() 行:40

看起来大括号中的类是基类。 eclipse总是会显示基类吗?

【问题讨论】:

    标签: java eclipse overriding stack-trace superclass


    【解决方案1】:

    如果调用基类的方法,堆栈行将显示基类(定义方法的位置)和调用该方法的对象的类。

    我在这里假设你做了类似的事情

    ToyotaCar car = new ToyotaCar();
    car.handle();
    

    其中ToyotaCar 不会覆盖handle() 方法。堆栈跟踪通知您对handle() 的调用不是由实际的ToyotaCar 提供服务,而是由AbstractCar 提供服务。然而,您在 ToyotaCar 对象上调用了它。

    如果您不重写基类方法,堆栈行的这种表示法本身可能看起来有些过分。但是,考虑一下您想要覆盖handle() 方法但仍需要在AbstractCar 上调用handle() 的情况。您将需要发出一个

    super.handle();
    

    ToyotaCar.handle() 内。在ToyotaCar 对象上调用handle() 方法时,您将首先将其调用为ToyotaCar,然后调用为AbstractCar。两条堆栈行将明确地允许您将一个调用与另一个调用区分开来。

    【讨论】: