【发布时间】:2025-12-27 18:15:11
【问题描述】:
在调试 java 代码时,在堆栈跟踪中,我注意到以下内容
ToyotaCar(AbstractCar).handle() 行:40
看起来大括号中的类是基类。 eclipse总是会显示基类吗?
【问题讨论】:
标签: java eclipse overriding stack-trace superclass
在调试 java 代码时,在堆栈跟踪中,我注意到以下内容
ToyotaCar(AbstractCar).handle() 行:40
看起来大括号中的类是基类。 eclipse总是会显示基类吗?
【问题讨论】:
标签: java eclipse overriding stack-trace superclass
如果调用基类的方法,堆栈行将显示基类(定义方法的位置)和调用该方法的对象的类。
我在这里假设你做了类似的事情
ToyotaCar car = new ToyotaCar();
car.handle();
其中ToyotaCar 不会覆盖handle() 方法。堆栈跟踪通知您对handle() 的调用不是由实际的ToyotaCar 提供服务,而是由AbstractCar 提供服务。然而,您在 ToyotaCar 对象上调用了它。
如果您不重写基类方法,堆栈行的这种表示法本身可能看起来有些过分。但是,考虑一下您想要覆盖handle() 方法但仍需要在AbstractCar 上调用handle() 的情况。您将需要发出一个
super.handle();
在ToyotaCar.handle() 内。在ToyotaCar 对象上调用handle() 方法时,您将首先将其调用为ToyotaCar,然后调用为AbstractCar。两条堆栈行将明确地允许您将一个调用与另一个调用区分开来。
【讨论】: