2

Javaコードをデバッグするとき、スタックトレースで、次のようなことに気付きました

ToyotaCar(AbstractCar).handle()ライン: 40

中括弧内のクラスが基本クラスのようです。日食は常に基本クラスを表示しますか?

4

1 に答える 1

2

基本クラスのメソッドを呼び出す場合、スタック ラインには、基本クラス (メソッドが定義されている場所) と、そのようなメソッドを呼び出したオブジェクトのクラスの両方が表示されます。

ここで、あなたが次のようなことをしたと仮定します

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

whereはメソッドToyotaCarをオーバーライドしません。handle()スタック トレースは、 への呼び出しがhandle()実際のToyotaCarではなく によって提供されていることを通知しますAbstractCar。それでも、ToyotaCarオブジェクトでそれを呼び出しました。

基本クラスのメソッドをオーバーライドしないと、スタック ラインのこの表記自体が過剰に見える場合があります。ただし、メソッドをオーバーライドしたいhandle()が、それでもhandle()onを呼び出す必要がある場合を考えてみてくださいAbstractCar。を発行する必要があります。

super.handle();

内部ToyotaCar.handle()。オブジェクトでhandle()メソッドを呼び出すときは、最初に として呼び出し、次に として呼び出します。2 つのスタック行により、一方の呼び出しを他方から明確に区別できます。ToyotaCarToyotaCarAbstractCar

于 2012-06-16T13:05:46.113 に答える