Javaコードをデバッグするとき、スタックトレースで、次のようなことに気付きました
ToyotaCar(AbstractCar).handle()
ライン: 40
中括弧内のクラスが基本クラスのようです。日食は常に基本クラスを表示しますか?
Javaコードをデバッグするとき、スタックトレースで、次のようなことに気付きました
ToyotaCar(AbstractCar).handle()
ライン: 40
中括弧内のクラスが基本クラスのようです。日食は常に基本クラスを表示しますか?
基本クラスのメソッドを呼び出す場合、スタック ラインには、基本クラス (メソッドが定義されている場所) と、そのようなメソッドを呼び出したオブジェクトのクラスの両方が表示されます。
ここで、あなたが次のようなことをしたと仮定します
ToyotaCar car = new ToyotaCar();
car.handle();
whereはメソッドToyotaCar
をオーバーライドしません。handle()
スタック トレースは、 への呼び出しがhandle()
実際のToyotaCar
ではなく によって提供されていることを通知しますAbstractCar
。それでも、ToyotaCar
オブジェクトでそれを呼び出しました。
基本クラスのメソッドをオーバーライドしないと、スタック ラインのこの表記自体が過剰に見える場合があります。ただし、メソッドをオーバーライドしたいhandle()
が、それでもhandle()
onを呼び出す必要がある場合を考えてみてくださいAbstractCar
。を発行する必要があります。
super.handle();
内部ToyotaCar.handle()
。オブジェクトでhandle()
メソッドを呼び出すときは、最初に として呼び出し、次に として呼び出します。2 つのスタック行により、一方の呼び出しを他方から明確に区別できます。ToyotaCar
ToyotaCar
AbstractCar