平成30年度 III-2

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

III-2 問題画像

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

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

解説

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

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

解き方

① 用語: オーバーライド=子クラスで親と同じメソッドを定義し直す、ポリモーフィズム=同じ呼出しで実際のクラスに応じた処理が動く、オーバーロード=同名で引数が違うメソッド、多重継承=親が複数
② SaleGoodsがgetPriceを定義し直している(オーバーライド)。Goods型の配列でgetPriceを呼ぶと、要素ごとに処理が変わる(ポリモーフィズム)。引数違いの同名メソッドも、親が複数のクラスもない
③ ④

正解が正しい理由

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

各選択肢について

覚えるべきポイント

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

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

出題履歴

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