---
title: "ポリモーフィズム（多相性）とは？オーバーライドとの関係を整理【基本情報技術者試験】"
description: "ポリモーフィズムを「同じ呼び出しでも対象によって異なる処理を行える性質」として整理し、オーバーライドとの関係や、カプセル化・多重継承・メッセージパッシングとの違いを科目Aの選択肢判断につなげて解説します。"
last_modified_at: "2026-08-16"
canonical_url: "https://stemtazoo.github.io/fe/polymorphism/"
section: "fe"
---

## まず結論

ポリモーフィズム（多相性）とは、**同じメソッドを呼び出しても、対象となるオブジェクトによって異なる処理を行える性質**です。

基本情報技術者試験では、次の関係を押さえておくと選択肢を切りやすくなります。

```text
同じメソッド名で呼び出す
        ↓
オブジェクトごとに動作が変わる
        ↓
ポリモーフィズム（多相性）
```

その代表的な実現方法の一つが、**オーバーライド**です。

## 直感的な説明

「同じ指示でも、相手によって動きが変わる」と考えると分かりやすいです。

例えば、`Animal` という共通のクラスがあり、`Dog` と `Cat` がそれを継承しているとします。

```text
Animal
  └ speak()

Dog
  └ speak() → 「ワン」

Cat
  └ speak() → 「ニャー」
```

呼び出す側は、どちらにも同じように `speak()` を呼び出します。

```text
Dog.speak() → ワン
Cat.speak() → ニャー
```

**呼び出し方は同じなのに、対象によって結果が変わる**のがポイントです。

この「一つの呼び出し方で、複数の振る舞いを扱える」という考え方がポリモーフィズムです。

## 定義・仕組み

ポリモーフィズムは、オブジェクト指向の代表的な性質の一つです。

上位クラスで共通のメソッドを定義し、下位クラスでそのメソッドを必要に応じて再定義すると、同じメソッド名でも異なる処理を実行できます。

この**上位クラスのメソッドを下位クラスで再定義すること**を、オーバーライドといいます。

```text
上位クラス
Animal.speak()

        ↓ 継承

下位クラス
Dog.speak()   ← オーバーライド
Cat.speak()   ← オーバーライド
```

ここで、ポリモーフィズムとオーバーライドは同じ言葉ではありません。

| 用語 | 何を表す？ |
|---|---|
| ポリモーフィズム | 同じ呼び出しでも対象によって異なる処理ができる性質 |
| オーバーライド | 上位クラスのメソッドを下位クラスで再定義すること |

つまり、**オーバーライドは手段、ポリモーフィズムは実現される性質**と整理すると分かりやすいです。

このテーマは、基本情報技術者試験の「アルゴリズムとプログラミング」やオブジェクト指向に関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、ポリモーフィズムそのものの説明だけでなく、**どの仕組みが多相性につながるか**を問われる形に注意します。

判断するときは、問題文に次のような表現がないかを探します。

- 同じメソッドを呼び出す
- オブジェクトごとに異なる動作をする
- 上位クラスのメソッドを下位クラスで再定義する
- 実行時に対象に応じた処理が選ばれる

このような説明があれば、**オーバーライドとポリモーフィズムの関係**を考えます。

試験では、似た用語が選択肢に並ぶことがあります。

| 用語 | 判断キーワード |
|---|---|
| オーバーライド | 上位クラスのメソッドを下位クラスで再定義 |
| カプセル化 | データと処理をまとめ、内部を隠す |
| 多重継承 | 複数の上位クラスを継承する |
| メッセージパッシング | オブジェクト同士がメッセージをやり取りする |

**「再定義によって、同じ呼び出しでも動作が変わる」ならオーバーライド**と判断できます。

## どんな場面で使う？

ポリモーフィズムを使うと、呼び出す側の処理を共通化しやすくなります。

例えば、犬、猫、鳥などのクラスがそれぞれ `speak()` を持っていても、呼び出す側は対象ごとの細かい違いを意識せずに同じ形で処理できます。

```text
animals の各要素に対して speak() を呼ぶ

Dog  → ワン
Cat  → ニャー
Bird → ピヨ
```

新しい種類のオブジェクトを追加するときも、そのクラスで `speak()` を適切にオーバーライドすれば、呼び出す側の処理を大きく変更せずに済みます。

FE試験では実装技法を深掘りするより、**「共通の呼び出し方で異なる振る舞いを扱える」ことが多相性の利点**と理解しておけば十分です。

## よくある誤解・混同

### ポリモーフィズムとオーバーライドは同じ？

同じではありません。

```text
オーバーライド
= メソッドを再定義する仕組み

ポリモーフィズム
= 同じ呼び出しでも異なる振る舞いを実現できる性質
```

**オーバーライドによってポリモーフィズムを実現できる**、という関係です。

### カプセル化との違いは？

カプセル化は、データと処理をひとまとめにし、必要に応じて内部の状態や実装を外部から隠す考え方です。

```text
カプセル化
→ 内部を隠す

ポリモーフィズム
→ 同じ呼び出しで動作を変える
```

目的が違います。

### 多重継承との違いは？

多重継承は、**一つのクラスが複数の上位クラスを継承すること**です。

「継承元が複数かどうか」の話なので、「同じ呼び出しで動作が変わる」というポリモーフィズムとは別の概念です。

### メッセージパッシングとの違いは？

メッセージパッシングは、オブジェクトに処理を依頼するためにメッセージを送る考え方です。

ポリモーフィズムの判断では、単にメッセージを送ることではなく、**同じ呼び出しに対して対象ごとに異なる処理が行われるか**を見るのがポイントです。

## まとめ（試験直前用）

- ポリモーフィズムは、同じ呼び出しでも対象によって異なる処理を行える性質
- オーバーライドは、上位クラスのメソッドを下位クラスで再定義すること
- 「再定義して動作を変える」ならオーバーライドを考える
- カプセル化は「内部を隠す」、多重継承は「複数のクラスから継承」と切り分ける
- オーバーライドは手段、ポリモーフィズムは実現される性質と整理する
