ホーム > システムアーキテクト試験 > 2023年
システムアーキテクト試験 2023年 午前2 問05
Javaサーブレットを用いたWebアプリケーションソフトウェアの開発では、例えば、doGetやdoPostなどのメソッドを、シグネチャ(メソッド名、引数の型・個数・順序)は変えずに、目的とする機能を実現するための処理に置き換える。このメソッドの置き換えを何と呼ぶか。
ア:オーバーライド(正解)
イ:オーバーロード
ウ:カプセル化
エ:継承
解説
Javaサーブレットのメソッド置き換えは何か【午前2 解説】
要点まとめ
- 結論:JavaサーブレットのdoGetやdoPostのメソッドをシグネチャを変えずに処理内容だけ置き換えるのは「オーバーライド」です。
- 根拠:オーバーライドは親クラスのメソッドを子クラスで同じシグネチャで再定義し、動作を変更する技術です。
- 差がつくポイント:オーバーロードは同名メソッドの引数を変えることであり、シグネチャを変えずに処理を変える点で混同しないことが重要です。
正解の理由
JavaサーブレットではHttpServletクラスのdoGetやdoPostメソッドを、引数の型や数を変えずに子クラスで再定義し、独自の処理を実装します。これが「オーバーライド」であり、親クラスのメソッドを上書きして動作を変えるための基本的な手法です。
一方、オーバーロードは同じメソッド名で引数の型や数を変えて複数定義することを指し、今回の問題の状況とは異なります。
一方、オーバーロードは同じメソッド名で引数の型や数を変えて複数定義することを指し、今回の問題の状況とは異なります。
よくある誤解
オーバーロードとオーバーライドを混同し、引数の変更がない場合でもオーバーロードと答える誤りが多いです。
また、継承やカプセル化と混同しがちですが、これらはメソッドの置き換えとは異なる概念です。
また、継承やカプセル化と混同しがちですが、これらはメソッドの置き換えとは異なる概念です。
解法ステップ
- 問題文の「シグネチャ(メソッド名、引数の型・個数・順序)は変えずに」とある点を確認する。
- メソッドの処理内容だけを置き換える行為を考える。
- シグネチャを変えずに親クラスのメソッドを再定義するのは「オーバーライド」であると判断する。
- 選択肢の意味を整理し、オーバーロードは引数を変えること、カプセル化は情報隠蔽、継承は親子関係の構築であることを確認する。
- 正解は「ア: オーバーライド」と決定する。
選択肢別の誤答解説
- ア: オーバーライド
正解。親クラスのメソッドを同じシグネチャで子クラスが再定義し、処理を置き換えること。 - イ: オーバーロード
誤り。同名メソッドで引数の型や数を変えて複数定義すること。シグネチャが変わるため今回のケースには該当しない。 - ウ: カプセル化
誤り。データや処理をクラス内部に隠し、外部からのアクセスを制限する設計思想であり、メソッドの置き換えとは無関係。 - エ: 継承
誤り。クラス間の親子関係を作る仕組みであり、メソッドの再定義(オーバーライド)とは異なる概念。
補足コラム
Javaのオーバーライドは多態性(ポリモーフィズム)を実現する重要な機能です。サーブレットではHttpServletのメソッドをオーバーライドすることで、HTTPリクエストに応じた独自の処理を実装します。
また、@Overrideアノテーションを付けることで、コンパイル時に正しくオーバーライドされているかチェックでき、バグ防止に役立ちます。
また、@Overrideアノテーションを付けることで、コンパイル時に正しくオーバーライドされているかチェックでき、バグ防止に役立ちます。
FAQ
Q: オーバーロードとオーバーライドの違いは何ですか?
A: オーバーロードは同じメソッド名で引数の型や数を変えて複数定義すること、オーバーライドは親クラスのメソッドを同じシグネチャで子クラスが再定義することです。
A: オーバーロードは同じメソッド名で引数の型や数を変えて複数定義すること、オーバーライドは親クラスのメソッドを同じシグネチャで子クラスが再定義することです。
Q: サーブレットでdoGetメソッドをオーバーライドしないとどうなりますか?
A: 親クラスのHttpServletのdoGetが呼ばれ、通常は405エラー(メソッド不許可)などが返され、期待する処理は実行されません。
A: 親クラスのHttpServletのdoGetが呼ばれ、通常は405エラー(メソッド不許可)などが返され、期待する処理は実行されません。
関連キーワード: オーバーライド, オーバーロード, Javaサーブレット, メソッド再定義, ポリモーフィズム