ホーム > システムアーキテクト試験 > 2019年
システムアーキテクト試験 2019年 午前2 問04
javaサーブレットを用いたWebアプリケーションソフトウェアの開発では、例えば、doGetやdoPostなどのメソッドを、シグネチャ(メソッド名、引数の型と個数)は変えずに、目的とする機能を実現するための処理に置き換える。このメソッドの置き換えを何と呼ぶか。
ア:オーバーライド(正解)
イ:オーバーロード
ウ:カプセル化
エ:継承
解説
javaサーブレットのdoGetやdoPostメソッドの置き換えは何か【午前2 解説】
要点まとめ
- 結論:doGetやdoPostのシグネチャを変えずに処理内容を置き換えることは「オーバーライド」と呼ばれます。
- 根拠:オーバーライドはスーパークラスのメソッドをサブクラスで再定義し、同じメソッド名・引数で動作を変更する技術です。
- 差がつくポイント:オーバーロードは同名メソッドの引数を変えることであり、シグネチャを変えずに処理を変える点でオーバーライドと明確に区別されます。
正解の理由
JavaサーブレットではHttpServletクラスのdoGetやdoPostメソッドをサブクラスで再定義し、HTTPリクエストに応じた処理を実装します。このとき、メソッド名や引数の型・個数(シグネチャ)は変えずに処理内容だけを置き換えます。これが「オーバーライド」であり、親クラスのメソッドを子クラスで上書きすることで機能を拡張・変更する典型的な例です。
よくある誤解
オーバーロードと混同しやすいですが、オーバーロードは同じメソッド名で引数の型や数を変えて複数定義することです。doGetやdoPostの置き換えは引数を変えないためオーバーロードではありません。
解法ステップ
- 問題文の「シグネチャ(メソッド名、引数の型と個数)は変えずに」とある点に注目する。
- メソッドの処理内容を置き換えるが、名前や引数は変えないことから「オーバーライド」の特徴と一致する。
- 選択肢の意味を確認し、「オーバーロード」は引数を変えること、「カプセル化」は情報隠蔽、「継承」は親子関係の定義であることを理解する。
- 以上より「オーバーライド」が正解と判断する。
選択肢別の誤答解説
- ア: オーバーライド
正解。親クラスのメソッドを同じシグネチャで再定義し、処理を置き換えること。 - イ: オーバーロード
誤り。同じメソッド名で引数の型や数を変えて複数定義すること。シグネチャが変わるため今回の問題には該当しない。 - ウ: カプセル化
誤り。データや処理をクラス内部に隠し、外部からのアクセスを制限する設計思想であり、メソッドの置き換えとは無関係。 - エ: 継承
誤り。クラス間の親子関係を定義することであり、メソッドの具体的な置き換え行為ではない。
補足コラム
Javaのオーバーライドは多態性(ポリモーフィズム)を実現する重要な機能です。サーブレットではHttpServletのdoGetやdoPostをオーバーライドすることで、HTTPリクエストに応じた独自の処理を実装できます。オーバーライド時は
@Override
アノテーションを付けることで、コンパイル時に正しくオーバーライドされているかチェックできます。FAQ
Q: オーバーロードとオーバーライドの違いは何ですか?
A: オーバーロードは同じメソッド名で引数の型や数を変えて複数定義すること、オーバーライドは親クラスのメソッドを同じシグネチャで再定義し処理を置き換えることです。
A: オーバーロードは同じメソッド名で引数の型や数を変えて複数定義すること、オーバーライドは親クラスのメソッドを同じシグネチャで再定義し処理を置き換えることです。
Q: サーブレットでdoGetメソッドをオーバーライドしないとどうなりますか?
A: デフォルトのdoGetは何も処理しないため、HTTP GETリクエストに対して適切な応答が返せません。必ずオーバーライドして処理を実装する必要があります。
A: デフォルトのdoGetは何も処理しないため、HTTP GETリクエストに対して適切な応答が返せません。必ずオーバーライドして処理を実装する必要があります。
関連キーワード: オーバーライド, オーバーロード, Javaサーブレット, メソッドの再定義, ポリモーフィズム