2

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

ToyotaCar(AbstractCar).handle()行数:40

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

4

1 回答 1

2

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

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

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

whereToyotaCar不会覆盖该handle()方法。堆栈跟踪通知您,您的调用handle()不是由实际的ToyotaCar,而是由AbstractCar. 然而,你在一个ToyotaCar对象上调用了它。

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

super.handle();

里面ToyotaCar.handle()。在对象上调用handle()方法时ToyotaCar,首先将其调用为 a ToyotaCar,然后调用为AbstractCar. 两条堆栈线将明确地允许您区分一个调用和另一个调用。

于 2012-06-16T13:05:46.113 回答