継承と実装の違いとは?初心者でも分かるオブジェクト指向の基本を実務目線で解説
結論として、継承(Inheritance)は「親クラスの機能を引き継ぐこと」、実装(Implementation)は「インターフェースで定義された機能を作ること」です。
どちらもオブジェクト指向プログラミングでよく使われますが、目的はまったく異なります。業務では「継承しているクラス」「インターフェースを実装しているクラス」が頻繁に登場するため、この違いを理解しておくと設計書やソースコードが読みやすくなります。
継承とは
継承(Inheritance)の概要
継承とは、親クラス(スーパークラス)の機能やデータを子クラス(サブクラス)が引き継ぐ仕組みです。
共通の処理を親クラスにまとめることで、同じコードを何度も書く必要がなくなります。
継承のイメージ
社員 ├─ 正社員 ├─ 契約社員 └─ アルバイト
例えば、社員全員が持つ「社員番号」「氏名」「部署」などは親クラスに定義し、雇用形態ごとの処理だけを子クラスに実装します。
| 親クラス(社員) | 子クラス(正社員) |
|---|---|
| 社員番号 | 給与計算 |
| 氏名 | 賞与計算 |
| 部署 | 残業手当計算 |
実装とは
実装(Implementation)の概要
実装とは、インターフェースで定義された機能を実際に作成することです。
インターフェースには「何をするか」が定義されており、「どのように実現するか」は実装するクラスが決めます。
実装のイメージ
印刷できる(インターフェース)
↑
┌────┼────┐
プリンター 複合機 PDF出力ソフト
どの機器も「印刷する」という機能を持っていますが、実際の印刷方法はそれぞれ異なります。
| クラス | 印刷方法 |
|---|---|
| プリンター | 紙へ印刷 |
| 複合機 | 紙へ印刷+管理機能 |
| PDF出力ソフト | PDFファイルを作成 |
継承と実装の違い
| 比較項目 | 継承 | 実装 |
|---|---|---|
| 対象 | クラス | インターフェース |
| 目的 | 共通処理を引き継ぐ | 機能を実現する |
| 共通データ | 引き継げる | 持たない |
| 共通処理 | 引き継げる | 持たない(言語によっては既定実装あり) |
| 複数利用 | 通常は単一継承 | 複数実装できる |
| キーワード(Java) | extends | implements |
なぜ継承と実装を使い分けるのか
システム開発では、共通処理をまとめたい場面と、機能だけを統一したい場面があります。
例えば社員管理システムでは、社員情報は全員共通なので継承を利用します。
一方で、「ログ出力できる」「CSV出力できる」「メール送信できる」などの機能は、さまざまなクラスで利用するためインターフェースを実装する設計がよく採用されます。
実際のIT現場での利用例
継承が使われる例
- 社員管理システム
- 顧客管理システム
- 商品管理システム
- ゲームキャラクター
- 車両管理システム
共通するデータや処理を親クラスにまとめることで、保守性を高めています。
実装が使われる例
- ログ出力
- メール送信
- CSV出力
- データ保存
- 認証処理
- 支払い処理
実装方法は異なっても、同じ機能として扱えるため、システムの拡張がしやすくなります。
初心者が混乱しやすいポイント
- どちらも「継ぐ」ように見える
- implementsも継承だと思ってしまう
- extendsとimplementsを混同する
- 親クラスとインターフェースの役割が分からなくなる
「共通処理を引き継ぐなら継承」「機能を約束するなら実装」と覚えると整理しやすくなります。
実務でよくある設計例
例えばファイル出力機能を持つシステムでは、次のような構成になることがあります。
| 要素 | 役割 |
|---|---|
| ファイル(抽象クラス) | ファイル名・保存先など共通情報を管理 |
| CSV出力インターフェース | CSVを書き出す機能を定義 |
| Excel出力インターフェース | Excelを書き出す機能を定義 |
| CSVファイルクラス | 抽象クラスを継承し、CSV出力を実装 |
このように、実務では継承と実装を組み合わせる設計が一般的です。
筆者が現場で経験したこと
新人の頃、「継承だけで十分では?」と思っていた時期がありました。しかし、システム改修でデータベースや外部サービスの接続先が変更になった際、インターフェースを実装した設計では、実装クラスを差し替えるだけで対応できました。
一方、継承だけに依存した設計では、親クラスの修正が複数の子クラスへ影響し、テスト範囲が広がるケースも経験しました。
この経験から、継承と実装は競合するものではなく、それぞれの役割に応じて使い分けることが重要だと実感しました。
新人が覚えておきたいポイント
| やりたいこと | 選ぶもの |
|---|---|
| 共通データを持たせたい | 継承 |
| 共通処理を再利用したい | 継承 |
| 同じ機能を複数クラスに持たせたい | 実装 |
| 将来的に機能を差し替えたい | 実装 |
設計書やソースコードで確認するポイント
- 親クラスを継承しているか確認する
- どのインターフェースを実装しているか確認する
- 共通処理が親クラスにまとめられているか確認する
- 実装クラスごとの差分を確認する
- 修正による影響範囲を確認する
業務で上司へ報告するポイント
- 修正対象が親クラスか実装クラスか
- 影響を受ける子クラスの数
- インターフェース利用箇所
- 他システムへの影響有無
- テスト対象の範囲
エスカレーションするタイミング
- 親クラスの変更が必要になった
- インターフェースの仕様変更が必要になった
- 影響範囲が把握できない
- 既存設計の意図が分からない
- 複数システムへ影響する可能性がある
関連するIT用語
- オブジェクト指向
- クラス
- 抽象クラス
- インターフェース
- ポリモーフィズム(多態性)
- カプセル化
- オーバーライド
- コンストラクター
よくある質問(FAQ)
継承と実装は同時に使えますか?
はい。例えばJavaでは、1つの親クラスを継承しながら、複数のインターフェースを実装できます。実務でも一般的な設計です。
どちらを優先して使うべきですか?
共通のデータや処理をまとめたい場合は継承、機能を統一したい場合は実装を選びます。目的に応じて使い分けることが大切です。
なぜ継承は通常1つだけなのですか?
複数の親クラスから継承すると、同じ名前のメソッドやフィールドが存在した場合にどちらを利用すべきか判断できなくなるためです。多くのオブジェクト指向言語では、この問題を避けるため単一継承を採用しています。
実務ではどちらが多く使われますか?
企業向けシステムでは両方とも頻繁に利用されます。特に保守性や拡張性を重視する開発では、継承と実装を組み合わせた設計が一般的です。
まとめ
継承と実装は似ているように見えますが、目的は大きく異なります。
- 継承は親クラスのデータや処理を引き継ぐ仕組み
- 実装はインターフェースで定義された機能を実現する仕組み
- 共通処理の再利用には継承、機能の統一には実装が適している
- 実務では両者を組み合わせることで、保守しやすく拡張性の高いシステムを構築できる
新人エンジニアや社内SEがソースコードを読む際は、まず「このクラスは何を継承しているか」「どのインターフェースを実装しているか」を確認する習慣を付けると、システム全体の構造を理解しやすくなります。

コメント