この記事では、「インターフェース」と「抽象クラス」の違いを分かりやすく説明していきます。
「インターフェース」とは?
「インターフェース」とは、Java・PHPなどのオブジェクト指向のプログラミング言語において、「変数+メソッドの形式」だけを定義するものです。
「インターフェース」では「メソッドの具体的な中身」までは記述しません。
「インターフェースを継承するクラス」で、メソッドの具体的な内容を改めて定義する必要があります。
継承先のクラスでメソッドを定義しない場合は、エラーがでることになります。
「インターフェース」は、「それを継承する先のクラス」に対して「具体的なメソッドの実装」を強制できるのです。
さらに「インターフェース」は、「複数のクラスの多重承継」ができる利点も持っています。
「抽象クラス」とは?
「抽象クラス」とは、JavaやPHPなどにおいて、「それだけではインスタンス化することができない抽象メソッドを一つ以上含むクラス」を意味しています。
「抽象クラス」は「他のクラスに承継されること」を前提にしてつくられるもので、「インターフェース」と同じく「具体的な処理方法のメソッド」までは定義しません。
「抽象クラス」も、「それを承継する先のクラス」に対して「メソッドの実装」を強制することができます。
ただし「抽象クラス」の場合は、「多重承継」することはできない仕様になっています。
「インターフェース」と「抽象クラス」の違い
「インターフェース」と「抽象クラス」はどちらも主にJavaやPHPなどで使用される宣言で、「具体的にどう処理するかについてまでは指定しない」という共通の性質も持っています。
両者のもっともシンプルな違いは、コードの宣言にあります。
「インターフェース」は「interface インターフェース名{}」と宣言します。
それに対して、「抽象クラス」は「abstract class クラス名{}」になるというプログラムの記述方法の違いになります。
「インターフェース」と「抽象クラス」の実際的な使い方の違いもあります。
「インターフェース」は、「複数のクラスに共通する機能(メソッド)があることを示す定義」のために使います。
「抽象クラス」は「他のクラスにも承継できる機能(メソッド)のフレームワークの作成」のために使用される違いを指摘することができます。
さらに「インターフェース」は「複数のクラスの多重承継」ができるのに対して、「抽象クラス」は多重の承継はできないという大きな違いもあります。
「インターフェース」は「外部に向けて公開する用途の実装」ですが、「抽象クラス」は「外部だけではなく内部向けの実装(protected)」もできる点も異なります。
まとめ
「インターフェース」と「抽象クラス」の違いについて詳細に説明しましたが、いかがでしたか? 「インターフェース」とは、「主にJavaにおいて変数+メソッドの形式のみを定義する目的で使われるもの」を意味しています。
「抽象クラス」というのは、「具体的にどのように処理するかを決めていない抽象メソッドを含んでいるクラス・多重承継できないもの」を示している違いを挙げることができます。
「インターフェース」と「抽象クラス」の違いについてリサーチしたいときは、この記事の解説を参考にしてみてください。