戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2014年 秋期 午前(科目A)47


問題文

多相性を実現するときに、特有のものはどれか。

選択肢

オーバライド(正解)
カプセル化
多重継承
メッセージパッシング

多相性を実現するときに、特有のものはどれか。【午前2 解説】

要点まとめ

  • 結論:多相性(ポリモーフィズム)を実現する特有の機構は「オーバライド」であり派生クラスが振る舞いを置き換えます。
  • 根拠:オーバライドは同じインタフェースや基底型で呼び出しても実行時に派生型のメソッドが選ばれるため動的束縛が可能です。
  • 差がつくポイント:カプセル化や多重継承は設計上の手段であり、メッセージパッシングは別の並行系概念でオーバライドほど多相性の本質を示しません。

正解の理由

オーバライドは基底クラスで定義したメソッドを派生クラスで再定義することで、同一の呼び出し文が実行時のインスタンス型に応じて異なる実装を実行させます。これが「サブタイプ多相性(サブタイピングによるポリモーフィズム)」の代表的手段で、動的束縛(ランタイムディスパッチ)により多相的な振る舞いを実現します。よって選択肢の中で多相性を「特有に」実現するのは (オーバライド)です。

よくある誤解

  • 「カプセル化が多相性を実現する」と誤解しやすい:カプセル化は情報隠蔽やモジュール性の向上が目的で、多相性そのものを生む機構ではありません。
  • 「多重継承=多相性」と思う誤り:多重継承は複数の親から機能を受け継ぐ仕組みであり、多相性はむしろメソッドの再定義(オーバライド)によって実現されます。
  • 「メッセージパッシングが多相性と同義」と混同:メッセージパッシングはオブジェクト間通信の方式で、多相性の実現方法とは別の観点です。

解法ステップ

  1. 問題文のキーワード「多相性」を確認し、ポリモーフィズムの定義を思い出す。
  2. 各選択肢が何を意味するかを簡潔に分類する(オーバライド=再定義、カプセル化=情報隠蔽、など)。
  3. 「特有のもの」とあるため、多相性を直接生む機構かどうかを基準に選ぶ。
  4. 実行時に型に応じた振る舞いが変わる仕組み(動的束縛)を提供するものを選択する。

選択肢別の誤答解説

  • : オーバライド — 正解。基底のメソッドを派生で上書きし同じ呼び出しが異なる振る舞いを示すため多相性を直接実現します。
  • イ: カプセル化 — 不正解。オブジェクトの内部状態と実装を隠すことで設計を安定させるが、多相性そのものを生む機構ではありません。
  • ウ: 多重継承 — 不正解。複数の親クラスから性質を継承する手段であり、継承関係は多相性の土台になり得るが「特有の」実現手段ではありません。
  • エ: メッセージパッシング — 不正解。オブジェクト間の通信(メッセージ送信)の方式で、オーバライドのように同一の呼び出しが実行時に変化する仕組みを意味しません。

補足コラム

多相性には大きく分けて「サブタイプ多相性(継承+オーバライドによる)」と「パラメトリック多相性(ジェネリクス)」があります。サブタイプ多相性はオーバライドと動的束縛が肝で、言語によって実装方法が異なります(Javaは仮想メソッドがデフォルト、C++はvirtual、Pythonは動的)。簡単な例を示します。
Javaの例(オーバライド)
class Animal {
    void speak() { System.out.println("..."); }
}
class Dog extends Animal {
    @Override
    void speak() { System.out.println("ワン"); }
}
Animal a = new Dog();
a.speak(); // 実行時に Dog#speak が呼ばれる(多相性)
Pythonの例(暗黙のオーバライド)
class Animal:
    def speak(self): print("...")
class Dog(Animal):
    def speak(self): print("ワン")
a = Dog()
a.speak()  # Dog.speak が呼ばれる
また、「オーバーロード(同名で引数違い)」はコンパイル時に決定されることが多く、多相性(実行時の振る舞いの違い)とは区別されます。

FAQ

Q1: オーバーロードとオーバライドはどちらが多相性に関係しますか?
A1: オーバライドが実行時多相性に直接関係します。オーバーロードは主にコンパイル時の静的多相(多重定義)で用途が異なります。
Q2: インタフェースの実装は多相性ですか?
A2: はい。インタフェース(抽象型)を実装し、実行時に具体クラスの振る舞いを呼ぶこともサブタイプ多相性の一形態で、オーバライド的な役割を果たします。
Q3: 多重継承があればオーバライドは不要ですか?
A3: いいえ。多重継承は複数ソースから機能を得る手段で、メソッドの置き換え(オーバライド)は依然として必要になる場面があります。

関連キーワード: オーバライド、多相性、ポリモーフィズム、カプセル化、多重継承、メッセージパッシング、継承、サブタイプ、動的束縛、Liskov置換原則
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について