平成27年度 III-23

科目: 専門科目 / 分野: 情報工学部門 / 年度: 平成27年度

III-23 問題画像

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

Javaプログラム(Goods、SaleGoods extends Goods、ShopのcalculateAmount)において用いられているオブジェクト指向技術の組合せを選ぶ問題。オーバーライドとポリモーフィズムが用いられている。

解説

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

コードの中で、どのオブジェクト指向技術が使われているかを見分ける問題。

解き方

① オーバーライド=親クラスと同じメソッドを子クラスで定義し直す、オーバーロード=同名で引数が違うメソッドを並べる、ポリモーフィズム=同じ呼出しで実際のクラスに応じた処理が動く
② SaleGoodsがgetPrice()を定義し直す=オーバーライド、goods[i].getPrice()が要素ごとに切り替わる=ポリモーフィズム。同名で引数違いのメソッドも、親が2つのクラスもない
③ ③

正解が正しい理由

SaleGoodsクラスは、Goodsクラスを継承し、親クラスのgetPriceメソッドと同じシグネチャのメソッドを定義し直している。これはオーバーライドである。また、ShopクラスのcalculateAmountでは、Goods型の配列の各要素に対して、getPrice()を呼び出しており、実際の要素がGoodsかSaleGoodsかによって、呼び出されるメソッドが実行時に切り替わる。これはポリモーフィズム(多態性)である。多重継承やオーバーロード(同名で引数が異なるメソッドの定義)は、このプログラムには使われていない。したがって③が最も適切である。

各選択肢について

覚えるべきポイント

オーバーライド=サブクラスでの、親クラスのメソッドの再定義。ポリモーフィズム=同じメッセージ(呼出し)に対して、オブジェクトの実際のクラスに応じた処理が実行される。オーバーロード=同名で引数が異なるメソッドの定義。

キーワード: オーバーライド、ポリモーフィズム、継承、オーバーロード、多重継承、Java、オブジェクト指向、情報工学部門

出題履歴

同じ問題が計2回出題されています(平成27年度、平成30年度)。