質問: new B(); a.sample(); } } では、「B」と表示される、というのが答えです。 何がどう違うのかが全く分かりません。 これから席を外すので、返信は夜になると思いますが、 どうか、よろしくお願いします。 追記:修正依頼を受け、修正済みです。
回答: a.sample(); と書かれていたら 1.の場合 aの(宣言上の)型を見ます。→Aでした。 Aにsample()が存在するか見ます。→ありませんでした。 ないものを使おうとしたのでコンパイルエラーです。 2.の場合 aの(宣言上の)型を見ます。→Aでした。 Aにsample()が存在するか見ます。→ありました。 aに、「aが持っている」sample()を実行させます。 aの中身は`a=new B()`、Bクラスでsample()の内容がオーバーライドされているので、 aの持っているsample()の内容はBクラスに書かれているほうのsample()です。