【抽象クラス】と【インターフェース】の違いとは?例文付きで使い方や意味をわかりやすく解説

【抽象クラス】と【インターフェース】の違いとは?例文付きで使い方や意味をわかりやすく解説
※本記事には広告・プロモーションが含まれています。

抽象クラスとインターフェースの分かりやすい違い

抽象クラスは、共通の処理を書き込みつつ、一部を「中身は子に任せる」と空けたまま残しておける親クラスです。インターフェースは、中身を持たず「この呼びかけに応えられること」という約束だけを並べた取り決めを指します。

抽象クラスは共通の土台を配る仕組み、インターフェースは満たすべき条件を示す仕組み、と考えると整理しやすいでしょう。多くの言語では、親クラスは一つしか持てないのに対し、インターフェースは複数を同時に満たせます。

抽象クラスとは?

抽象クラスは、それ自体からは実体を作れないクラスで、共通の処理をあらかじめ書き込んでおきながら、一部の操作については中身を書かずに「これは子が用意すること」と宣言しておけるものです。たとえば「図形」という抽象クラスに、名前を持たせる処理や、説明文を返す処理は共通で書いておき、「面積を出す」という操作だけは空けておきます。

円や四角といった子のクラスが、それぞれの計算方法を埋めることで、初めて実体を作れるようになります。共通の土台を一か所に置き、変わる部分だけを差し替える設計に向いた仕組みです。

ただし親クラスとしての結びつきを伴うため、多くの言語では一つしか継承できず、あとから別の土台に乗り換えるのは容易ではありません。土台を配ることと、縛りが生まれることは、表と裏の関係にあります。

抽象クラスの例文

  • ( 1 ) 図形を表す抽象クラスを用意し、面積の計算だけ子に任せた。
  • ( 2 ) 抽象クラスからは、そのままでは実体を作れない。
  • ( 3 ) 共通の処理は抽象クラスに書き、変わる部分だけを差し替える設計にした。
  • ( 4 ) 多くの言語では、抽象クラスは一つしか継承できない。
  • ( 5 ) 土台を配れる代わりに、抽象クラスは親子の縛りを生む。
  • ( 6 ) この抽象クラスには、実装済みの処理と未実装の宣言が混在している。

抽象クラスの会話例

抽象クラスって、普通のクラスと何が違うんですか。
そのままでは実体を作れません。一部の処理を、あえて書かずに空けておけるんです。
空けたままでいいんですか。
子のクラスが埋めます。共通の土台は親に書いておいて、変わる部分だけ任せる形ですね。
便利そうですね。
ただし親子の縛りが生まれます。多くの言語では、親は一つしか選べませんから。

インターフェースとは?

インターフェースは、「この呼びかけに応えられること」という約束の一覧を定めた取り決めです。中身の処理は書かず、どんな操作を備えているべきかだけを並べます。これを満たすと宣言したクラスは、その操作を必ず用意しなければならず、代わりに、外から見れば同じように扱ってもらえます。

「印刷できるもの」「保存できるもの」といった性質を示す使い方が典型で、まったく血縁のないクラスどうしでも、同じ約束を満たしていれば同じ場所に差し込めます。多くの言語では、一つのクラスが複数のインターフェースを同時に満たせるため、性質を組み合わせて表現できるのが大きな利点です。言語によっては標準の実装を書ける仕組みもあり、抽象クラスとの境界はやや近づいているとされます。

それでも「共通の土台を配る」抽象クラスと、「満たすべき条件を示す」インターフェースという役割の違いは残ります。

インターフェースの例文

  • ( 1 ) 「保存できる」というインターフェースを定義し、複数のクラスに満たさせた。
  • ( 2 ) インターフェースは中身を持たず、できることの約束だけを並べる。
  • ( 3 ) 血縁のないクラスどうしでも、同じインターフェースを満たせば同じ場所に差し込める。
  • ( 4 ) 一つのクラスが複数のインターフェースを同時に満たすこともできる。
  • ( 5 ) インターフェースを守っていれば、内部の作りが違っても呼び出す側は困らない。
  • ( 6 ) 試験用の簡易な実装も、同じインターフェースを満たすように作った。

インターフェースの会話例

インターフェースは、その縛りがないということですか。
はい。中身を持たず、できることの約束だけを並べます。
約束、というと。
「保存できる」「印刷できる」といった性質ですね。満たせば同じように扱ってもらえます。
複数を同時に満たせますか。
多くの言語では可能です。性質を組み合わせて表現できるのが強みですね。

抽象クラスとインターフェースの違いまとめ

抽象クラスとインターフェースは、どちらも共通の扱いを可能にする仕組みですが、配るものが違います。抽象クラスは共通の処理を書き込んだ土台であり、一部を空けて子に埋めさせます。

土台を配れる代わりに親子の縛りが生まれ、多くの言語では親は一つしか選べません。インターフェースは中身を持たず、「この呼びかけに応えられること」という約束だけを示します。

血縁のないクラスどうしでも同じ場所に差し込めるうえ、複数の約束を同時に満たせます。共通の土台を配りたいなら抽象クラス、満たすべき条件を示したいならインターフェース、と考えると迷いません。

抽象クラスとインターフェースの読み方

  • 抽象クラス(ひらがな):ちゅうしょうくらす
  • 抽象クラス(ローマ字):chuushoukurasu
  • インターフェース(ひらがな):いんたーふぇーす
  • インターフェース(ローマ字):intaafeesu
  1. TOP
  2. 言葉の違い
  3. IT・通信
  4. 【抽象クラス】と【インターフェース】の違いとは?例文付きで使い方や意味をわかりやすく解説