【抽象クラス】と【インターフェース】の違いとは?例文付きで使い方や意味をわかりやすく解説
抽象クラスとインターフェースの分かりやすい違い
抽象クラスは、共通の処理を書き込みつつ、一部を「中身は子に任せる」と空けたまま残しておける親クラスです。インターフェースは、中身を持たず「この呼びかけに応えられること」という約束だけを並べた取り決めを指します。
抽象クラスは共通の土台を配る仕組み、インターフェースは満たすべき条件を示す仕組み、と考えると整理しやすいでしょう。多くの言語では、親クラスは一つしか持てないのに対し、インターフェースは複数を同時に満たせます。
抽象クラスとは?
抽象クラスは、それ自体からは実体を作れないクラスで、共通の処理をあらかじめ書き込んでおきながら、一部の操作については中身を書かずに「これは子が用意すること」と宣言しておけるものです。たとえば「図形」という抽象クラスに、名前を持たせる処理や、説明文を返す処理は共通で書いておき、「面積を出す」という操作だけは空けておきます。
円や四角といった子のクラスが、それぞれの計算方法を埋めることで、初めて実体を作れるようになります。共通の土台を一か所に置き、変わる部分だけを差し替える設計に向いた仕組みです。
ただし親クラスとしての結びつきを伴うため、多くの言語では一つしか継承できず、あとから別の土台に乗り換えるのは容易ではありません。土台を配ることと、縛りが生まれることは、表と裏の関係にあります。
抽象クラスの例文
- ( 1 ) 図形を表す抽象クラスを用意し、面積の計算だけ子に任せた。
- ( 2 ) 抽象クラスからは、そのままでは実体を作れない。
- ( 3 ) 共通の処理は抽象クラスに書き、変わる部分だけを差し替える設計にした。
- ( 4 ) 多くの言語では、抽象クラスは一つしか継承できない。
- ( 5 ) 土台を配れる代わりに、抽象クラスは親子の縛りを生む。
- ( 6 ) この抽象クラスには、実装済みの処理と未実装の宣言が混在している。
抽象クラスの会話例
インターフェースとは?
インターフェースは、「この呼びかけに応えられること」という約束の一覧を定めた取り決めです。中身の処理は書かず、どんな操作を備えているべきかだけを並べます。これを満たすと宣言したクラスは、その操作を必ず用意しなければならず、代わりに、外から見れば同じように扱ってもらえます。
「印刷できるもの」「保存できるもの」といった性質を示す使い方が典型で、まったく血縁のないクラスどうしでも、同じ約束を満たしていれば同じ場所に差し込めます。多くの言語では、一つのクラスが複数のインターフェースを同時に満たせるため、性質を組み合わせて表現できるのが大きな利点です。言語によっては標準の実装を書ける仕組みもあり、抽象クラスとの境界はやや近づいているとされます。
それでも「共通の土台を配る」抽象クラスと、「満たすべき条件を示す」インターフェースという役割の違いは残ります。
インターフェースの例文
- ( 1 ) 「保存できる」というインターフェースを定義し、複数のクラスに満たさせた。
- ( 2 ) インターフェースは中身を持たず、できることの約束だけを並べる。
- ( 3 ) 血縁のないクラスどうしでも、同じインターフェースを満たせば同じ場所に差し込める。
- ( 4 ) 一つのクラスが複数のインターフェースを同時に満たすこともできる。
- ( 5 ) インターフェースを守っていれば、内部の作りが違っても呼び出す側は困らない。
- ( 6 ) 試験用の簡易な実装も、同じインターフェースを満たすように作った。
インターフェースの会話例
抽象クラスとインターフェースの違いまとめ
抽象クラスとインターフェースは、どちらも共通の扱いを可能にする仕組みですが、配るものが違います。抽象クラスは共通の処理を書き込んだ土台であり、一部を空けて子に埋めさせます。
土台を配れる代わりに親子の縛りが生まれ、多くの言語では親は一つしか選べません。インターフェースは中身を持たず、「この呼びかけに応えられること」という約束だけを示します。
血縁のないクラスどうしでも同じ場所に差し込めるうえ、複数の約束を同時に満たせます。共通の土台を配りたいなら抽象クラス、満たすべき条件を示したいならインターフェース、と考えると迷いません。
抽象クラスとインターフェースの読み方
- 抽象クラス(ひらがな):ちゅうしょうくらす
- 抽象クラス(ローマ字):chuushoukurasu
- インターフェース(ひらがな):いんたーふぇーす
- インターフェース(ローマ字):intaafeesu