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

ToyotaCar(AbstractCar).handle()行:40

看起来括号中的类是基类。蚀会始终显示基类吗?

最佳答案

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

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

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


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

就其本身而言,如果您不重写基类方法,则用于堆栈行的此符号可能看起来过多。但是,请考虑要覆盖handle()方法但仍需要在handle()上调用AbstractCar的情况。您将需要发出一个

super.handle();


ToyotaCar.handle()中。在handle()对象上调用ToyotaCar方法时,首先将其称为ToyotaCar,然后称为AbstractCar。两条堆栈线将明确允许您告诉另一个呼叫。

关于java - 堆栈跟踪行中引用的基类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11063658/

10-11 15:55