• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メソッドのオーバーライド(java))

メソッドのオーバーライド(java)

このQ&Aのポイント
  • クラスBのメソッドが実行される仕組みとは?
  • クラスMethodOverriding3でエラーが発生する理由は?
  • メソッドのオーバーライドについての疑問

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

まずobj.hello("abc")がコンパイルエラーになるほうから。変数objはクラスA3として宣言されているので、A3が持っているメソッド(引数無しのhello()とhello(int)、およびそれらを子クラスでオーバーライドしたもの)しか呼べません。objに代入されているのがC3のオブジェクトであっても、正しくコンパイルできるかどうかの判断は変数objに代入されている値ではなく、objの型(A3)に基づいて行われます。 一方、obj.hello()で"B3"が出力されるほうは、コンパイル時ではなく実行時の話なのでobjの型(A3)ではなくobjに代入されているオブジェクトの型(C3)に基づいて決まります。C3のオブジェクトが持っている引数無しのhello()メソッドはA3とB3で定義したものですが、C3に最も近いB3のhello()が優先されます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

hello()は B3 でoverride されているので、 B3の Hello()が実行されます。 つまり、C3 では B3でさしかわった hello()が使われるのです。 そのように指示されたからそのように動いただけで、 文法上はそれ以上の理屈は有りません。 override とはそういうものなのです。 何故 override がそのようにきめられたのかは ポリフォーニズムというオブジェクト指向の 考え方に基づいています。 これを学習して override をどう使うかを知ってください。

すると、全ての回答が全文表示されます。

関連するQ&A