令和元年度 III-7

科目: 専門科目 / 分野: 情報工学部門 / 年度: 令和元年度

III-7 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

継承とメソッドのオーバーライドを含むJavaプログラム(incTwiceとオーバーライドされたinc)の実行結果を求める問題。

解説

この問題で問われていること

オーバーライドされたメソッドが実行時にどう呼ばれるかを追って、出力を求める問題。

解き方

① Javaのメソッドは、変数の型ではなく実際に作ったオブジェクトのクラスのものが呼ばれる(動的束縛)
② x の実体は PlusTwo2 → incTwice 内の inc は PlusTwo2 の inc(−1する)。inc(inc(5))=inc(4)=3
③ ①

正解が正しい理由

変数xの型はPlusTwoだが、実体はPlusTwo2のオブジェクトである。incTwiceはPlusTwoから継承され、その中で呼ばれるincは、実体のクラスPlusTwo2でオーバーライドされたinc(return --a;)になる。よってincTwice(5)=inc(inc(5))=inc(4)=3。したがって①が正しい。

各選択肢について

覚えるべきポイント

オーバーライドされたメソッドは、親クラスのメソッドの中から呼ばれても子クラスのものが実行される(動的束縛)。

キーワード: Java、オーバーライド、継承、動的束縛、ポリモーフィズム、情報工学部門