---
title: "継承（インヘリタンス）とは？上位クラスの機能を引き継ぐ仕組み【基本情報技術者試験】"
description: "継承を「共通の機能を上位クラスにまとめ、下位クラスが引き継ぐ仕組み」として整理し、変更箇所の局所化という利点や、カプセル化・ポリモーフィズム・抽象化との違いをFE科目A向けに解説します。"
last_modified_at: "2026-08-24"
canonical_url: "https://stemtazoo.github.io/fe/inheritance/"
section: "fe"
---

## まず結論

**継承（Inheritance）**とは、上位クラスが持つデータや機能を、下位クラスが引き継ぐ仕組みです。

基本情報技術者試験では、次の判断軸を押さえると選択肢を切りやすくなります。

```text
共通部分を上位クラスにまとめる
↓
下位クラスが引き継ぐ
↓
同じ処理を何度も定義しなくてよい
↓
変更箇所を局所化しやすい
```

特に、**「上位クラスの性質を引き継ぐ」「共通部分をまとめる」「変更箇所を減らす」**という表現があれば、継承を疑います。

## 直感的な説明

継承は、「共通する部分を親にまとめて、子がそれを受け継ぐ」と考えると分かりやすいです。

例えば、`Vehicle` という上位クラスに、乗り物に共通する機能を定義します。

```text
Vehicle
├─ move()
└─ stop()

   ↓ 継承

Car
├─ move()
├─ stop()
└─ refuel()

Truck
├─ move()
├─ stop()
└─ loadCargo()
```

`Car` と `Truck` の両方で `move()` や `stop()` を一から定義する必要はありません。

共通部分を `Vehicle` にまとめておけば、下位クラスはそれを引き継げます。

このとき、共通の `move()` の処理を変更したい場合も、上位クラス側を中心に見直せるため、同じ変更を複数のクラスへ繰り返す必要を減らせます。

> **継承のポイントは、「共通部分を一か所に寄せる」ことです。**

## 定義・仕組み

オブジェクト指向では、似た性質を持つクラス同士を、上位・下位の関係で整理できます。

### 上位クラスと下位クラス

上位クラスは、複数のクラスに共通する性質や処理を持ちます。

下位クラスは、その共通部分を引き継ぎつつ、自分だけの機能を追加できます。

```text
上位クラス
Animal
├─ name
└─ move()

   ↓ 継承

下位クラス
Dog
├─ name
├─ move()
└─ bark()
```

この関係は、次のように整理できます。

| 用語 | 意味 |
|---|---|
| 上位クラス | 共通する性質や処理を定義するクラス |
| 下位クラス | 上位クラスの性質や処理を引き継ぐクラス |
| 継承 | 上位クラスの機能を下位クラスが受け継ぐ仕組み |

### 継承すると何がうれしい？

同じ処理を複数のクラスに重複して書くと、仕様変更のたびに複数箇所を直す必要があります。

```text
継承を使わない
Car.move()   を修正
Truck.move() を修正
Bus.move()   を修正
```

共通部分を上位クラスへまとめれば、変更箇所を減らしやすくなります。

```text
継承を使う
Vehicle.move() を中心に修正
        ↓
Car / Truck / Bus が共通機能を引き継ぐ
```

このように、**共通機能の変更箇所を局所化しやすい**ことが継承の利点です。

ただし、すべての変更が必ず上位クラス1か所だけで済むわけではありません。下位クラスが独自に再定義している処理などは、個別に確認が必要です。

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

## 科目Aでどう出る？

科目Aでは、オブジェクト指向の特徴として、継承・カプセル化・ポリモーフィズムなどを切り分ける問題に注意します。

### 判断キーワード

| 問題文の表現 | 疑う概念 |
|---|---|
| 上位クラスの性質を引き継ぐ | 継承 |
| 共通部分をまとめて再利用する | 継承 |
| 変更箇所を局所化しやすい | 継承 |
| 内部のデータや実装を隠す | カプセル化 |
| 同じ呼び出しで動作が変わる | ポリモーフィズム |
| 本質的な特徴だけを取り出す | 抽象化 |

試験中は、次の3つを特に区別すると判断しやすくなります。

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

継承
→ 親の性質を引き継ぐ

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

### 「変更箇所を局所化」の意味

継承について、次のような説明が出ることがあります。

```text
共通処理を上位クラスにまとめる
↓
下位クラスがそれを引き継ぐ
↓
共通部分の変更を一か所に寄せやすい
```

ここでいう「局所化」とは、**変更しなければならない場所をできるだけ限定すること**です。

「上位クラスを変更するためには、その上にあるすべてのクラスも変更しなければならない」という意味ではありません。

## どんな場面で使う？

### 共通機能をまとめたいとき

複数のクラスに同じ処理がある場合、共通部分を上位クラスへまとめられます。

```text
社員
├─ 氏名
└─ 出勤する()

正社員
└─ 賞与を計算する()

契約社員
└─ 契約期間を確認する()
```

`氏名` や `出勤する()` のような共通部分を社員クラスにまとめれば、それぞれの下位クラスで重複して定義する必要を減らせます。

### 種類を追加したいとき

既存の上位クラスを基にして、新しい下位クラスを追加できます。

```text
Vehicle
├─ Car
├─ Truck
└─ Bus  ← 新しく追加
```

共通機能は引き継ぎ、追加する種類に必要な機能だけを定義できます。

## よくある誤解・混同

### 継承とカプセル化は同じ？

違います。

```text
継承
→ 共通部分を上位クラスから引き継ぐ

カプセル化
→ データや処理をまとめ、内部を隠す
```

カプセル化は、オブジェクト間の不要な依存を減らしやすくする考え方です。

**「カプセル化によって相互依存性を高める」**という説明は、方向が逆なので注意します。

詳しくは、[カプセル化とは？継承・多態性との違い](https://stemtazoo.github.io/fe/encapsulation/)で整理しています。

### 継承とポリモーフィズムは同じ？

違います。

継承は、上位クラスの機能を引き継ぐ仕組みです。

ポリモーフィズムは、同じメソッドを呼び出しても、対象によって異なる処理を実行できる性質です。

```text
継承
→ 引き継ぐ

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

継承した下位クラスでメソッドをオーバーライドすることで、ポリモーフィズムを実現することがあります。

詳しくは、[ポリモーフィズム（多相性）とは？オーバーライドとの関係を整理](https://stemtazoo.github.io/fe/polymorphism/)で確認できます。

### 下位クラスを変更すると、上位クラスも必ず変更する？

必ずしも変更しません。

下位クラスは、上位クラスから共通機能を引き継いだうえで、独自の機能を追加できます。

```text
上位クラス
→ 共通部分

下位クラス
→ 共通部分を引き継ぐ
→ 独自部分だけ追加・変更
```

そのため、下位クラス固有の変更なら、上位クラスに影響を与えずに変更できる場合があります。

### 抽象化では操作をすべて事前に決める？

そのように覚えるのは適切ではありません。

抽象化は、対象の細かな違いをすべて列挙することではなく、**共通する本質的な特徴に注目して整理すること**です。

```text
細かい違いを全部扱う
→ 抽象化ではない

共通する重要な特徴を取り出す
→ 抽象化
```

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

- 継承は、上位クラスの性質や処理を下位クラスが引き継ぐ仕組み
- 共通部分を上位クラスへまとめることで、重複を減らせる
- 共通部分の変更箇所を局所化しやすい
- カプセル化は「内部を隠す」、継承は「引き継ぐ」
- ポリモーフィズムは「同じ呼び出しで動作が変わる」
- 「親の性質を引き継ぐ」「共通部分をまとめる」「変更箇所を局所化」が継承の判断ワード
