blog

Javaの基本 - 抽象クラスとインターフェースの違い

抽象クラス: abstract キーワードで修飾されたクラスを抽象クラスと呼びます。 インターフェース: インターフェースは interface キーワードで宣言します:...

Jul 3, 2020 · 2 min. read
シェア

抽象クラス: abstract キーワードで修飾されたクラスを抽象クラスと呼びます。

  1. 抽象クラスはインスタンス化できません。
  2. 抽象メソッドを含むクラスは抽象クラスでなければなりませんが、抽象クラスが必ずしも抽象メソッドを含むとは限りません。
  3. 抽象クラスの抽象メソッドの修飾子はpublicかprotectedのみで、デフォルトはpublicです。
  4. 抽象クラスを継承するサブクラスは、親クラスが宣言したすべての抽象メソッドを実装しなければなりません。
  5. 抽象クラスは、属性、メソッド、コンストラクタを含むことができますが、コンストラクタはオブジェクトのインスタンス化に使用することはできません。

インターフェイス:インターフェイスは、インターフェイスのキーワード宣言を使用して、インターフェイスは、クラスの種類ではなく、クラスの要件のセットを記述することです。

  1. インターフェイスはインスタンス化できません。
  2. インタフェースは抽象的でないメソッドを含みません。
  3. public 定数は、デフォルトでは interface の中で public static final 修飾子を使ってのみ宣言できます。
  4. インターフェイスはインターフェイスからのみ継承でき、1 つ以上のインターフェイスから継承できます。
  5. インターフェースを実装するクラスは、インターフェースの抽象メソッドをすべて実装しなければなりません。

区別:

二つの側面があります:

  • 構文レベルでの違い
    • 抽象クラスではメソッドの実装が可能ですが、インターフェースでは抽象メソッドしか存在できません;
    • 抽象クラスのメンバ変数にはさまざまな型がありますが、インターフェースでは public static 定数 public static final しかありません;
    • 抽象クラスは静的コードブロックと静的メソッドを持つことができますが、インターフェースは静的コードブロックと静的メソッドを持つことができません;
    • クラスは1つの抽象クラスしか継承できませんが、クラスは複数のインタフェースを実装できます。
    • 抽象クラスはインターフェイスも実装できますが、インターフェイスはインターフェイスからのみ継承できます。
  • 設計レベル:
    • 抽象クラスはモノの抽象化、つまりクラスの抽象化であり、インターフェースは振る舞いの抽象化です。 抽象クラスはクラスの属性と振る舞いを含むクラス全体の抽象化であり、インターフェースはクラスのローカルな振る舞いの抽象化です。
    • 個人的な理解:抽象的なクラスは、共通の属性や行動の一部であり、個々の下に全体が同じ属性や行動の一部を持っている必要があります全体に抽象化され、唯一の特定の違いの下で単一の個体では、例えば:動物は大きなクラスであり、人やクマは、手足、内臓の属性だけでなく、食べることの行動を持っている、寝て、しかし、人々は調理された肉を食べる、クマは生肉を食べる、上の行為の特定の実装の動作を食べる。違いがあります。インターフェースは、多くのものに共通する振る舞いを抽出する方法であり、オブジェクトによってその振る舞いの解釈は異なります。
    • 簡単に言えば、抽象クラスはクラスを抽象化したものであり、インターフェースはクラスやクラスのクラスが持つべきメソッドです。
    • 抽象クラスは多くのクラスの親としてのテンプレート設計であり、インターフェースは振る舞いの仕様、放射状設計です。
Read next

デザインパターンビルダーパターン

Builderパターンは、主に複雑なオブジェクトの作成のために、より複雑なオブジェクトの作成型のパターンです。この記事で紹介するのは、Directorの実装があるBuilderパターン、Directorの実装がないBuilderパターン、Lombokの実装です。プロジェクトでは、より複雑なオブジェクトが作成されることがあります。

Jul 2, 2020 · 7 min read