抽象クラスとインターフェースの違い(表あり)

抽象クラスとインターフェースの違い(表あり)

ご存知のとおり、抽象化とは機能の内部実装を指し、実用性のみをユーザーに示します。 つまり、それがどのように機能するかを示します (ただし、このインターフェイスは Java での完全な抽象化を提供しますが、これは抽象カテゴリでは実現できません。

抽象クラスとインターフェイス

 抽象クラスとインターフェイスの主な違いは、関連インターフェイスが別の Java インターフェイスのみを拡張することです。 関連する抽象カテゴリは別の Java カテゴリを開発し、複数の Java インターフェイスを実装します。 Java インターフェースのメンバーは、デフォルトでは public とは異なります。 Java 抽象カテゴリには、personal、protected などのカテゴリ メンバーが含まれます。

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

抽象クラスは、宣言に abstract キーワードを持つクラスです。 少なくとも XNUMX つの抽象メソッド、つまり本体のないメソッドが抽象クラスに存在する必要があります。 具体的な方法はいろいろあるかもしれません。

抽象クラスを使用して、具象クラスの設計図を生成できます。 ただし、抽象メソッドは継承クラスで実装する必要があります。

インターフェイスは、クラスの作成に使用できるブループリントです。 インターフェイスには具体的なメソッド (コードを持つメソッド) はありません。 インターフェイスのメソッドはすべて抽象メソッドです。

インターフェースを作成することはできません。 一方、インターフェイスを実装するクラスはインスタンス化できます。 インスタンス変数はインターフェイスでは決して使用されません。 ただし、パブリック静的最終変数 (定数クラス変数とも呼ばれる) は使用できます。

抽象クラスとは?

抽象クラスは、他のクラスの設計図またはテンプレートとして機能するオブジェクト指向プログラミング (OOP) の基本概念です。 これはインスタンス化できないクラスであり、他のクラスによって拡張またはサブクラス化されることを目的としています。 抽象クラスは、継承階層内で複数の関連クラスが共有する共通の属性とメソッドを定義します。

抽象クラスの主な特性と特徴は次のとおりです。

  1. インスタンス化できません: 抽象クラスを使用してオブジェクトまたはインスタンスを直接作成することはできません。 代わりに、サブクラスがそのプロパティとメソッドを継承して実装するためのフレームワークを提供します。
  2. 抽象メソッドが含まれる場合があります: 抽象クラスには 1 つ以上の抽象メソッドが含まれます。実装の詳細を含まないメソッド宣言。サブクラスは、これらの抽象メソッドの具体的な実装を提供する必要があります。
  3. 具体的なメソッドが含まれる場合があります: 抽象クラスには、サブクラスが継承できる具体的な (完全に実装された) メソッドを持つこともできます。 これらのメソッドは、すべてのサブクラスで共有される共通の機能を提供できます。
  4. コードの再利用のために使用されます: 抽象クラスは、共通のコードを XNUMX つの抽象クラスで定義し、関連するサブクラス間で共有できるようにすることで、コードの再利用性と DRY (Don'trepeat Yourself) 原則を促進します。
  5. 継承: サブクラスは、抽象クラスで定義された属性とメソッドを継承します。 これにより、共通の構造を維持しながら、動作の特殊化とカスタマイズが可能になります。
  6. 抽象クラスと具象クラス: 抽象クラスは、直接インスタンス化できる具象クラスとは区別されます。 具象クラスは、すべてのメソッドの完全な実装を提供します。

Java や C# などの言語では、キーワード「abstract」は抽象クラスを定義します。 抽象クラスは、派生クラスのカスタマイズと特殊化を可能にしながら、共通の特性と動作を共有する関連クラスの階層を構築するための貴重なツールです。

インターフェースとは?

インターフェイスは、インターフェイスに準拠するクラスによって実装される必要があるコントラクトまたはメソッド シグネチャのセットを定義するオブジェクト指向プログラミング (OOP) の基本概念です。 インターフェイスは、多重継承を直接サポートしていない言語で多重継承を実現する方法を提供し、コードの抽象化、モジュール性、柔軟性を促進します。

インターフェイスの主な機能と特性は次のとおりです。

  1. メソッドの署名: インターフェイスは、実装の詳細なしでメソッド シグネチャのコレクションを定義します。 これらのメソッド シグネチャは、実装クラスが提供する必要がある一連の動作を表します。
  2. 契約上の義務: クラスがインターフェイスを実装する場合、そのインターフェイスで定義されているすべてのメソッドに対して具体的な実装を提供する必要があります。 そうしないとコンパイル エラーが発生します。
  3. 多重継承: 単一継承 (XNUMX つのクラスの拡張) をサポートするクラスとは異なり、クラスは複数のインターフェイスを実装できます。 これにより、クラスが複数の動作セットを継承して提供できるようになります。
  4. 抽象化とポリモーフィズム: インターフェイスは、「何を」(メソッドのシグネチャ)を「どのように」(メソッドの実装)から分離することで抽象化を促進します。 この抽象化によりポリモーフィズムが可能になり、同じインターフェイスを実装する異なるクラスのオブジェクトを互換的に扱うことができます。
  5. コードの再利用性: インターフェイスは、さまざまなクラスが実装できる共通の動作を定義することにより、コードの再利用を容易にします。 これは、DRY (Don't Reply Yourself) 原則を促進します。
  6. 柔軟性: インターフェイスは、実装するインターフェイスに基づいてクラスを交換できるようにすることで、疎結合コードを可能にします。 この柔軟性は、モジュール式で拡張可能なシステムを設計する場合に特に役立ちます。

インターフェイスは、Java、C#、TypeScript などの言語で広く使用されており、クラス間のコントラクトを定義および強制することで、クラスが指定された API (アプリケーション プログラミング インターフェイス) に準拠し、多様な実装を可能にしながら共通の動作を共有できるようにします。

抽象クラスとインターフェースの比較表

 分化のパラメータ抽象クラスインタフェース
インスタンス化直接インスタンス化することはできません。直接インスタンス化することはできません。
目的 他のクラスのブループリントとして機能し、実装の有無にかかわらず両方のメソッド宣言を提供できます。直接インスタンス化することはできません。
メソッド抽象 (未実装) メソッド、具象 (実装) メソッド、または両方の組み合わせを使用できます。実装は含まれず、メソッド シグネチャのみが含まれます。 すべてのメソッドは暗黙的に抽象です。
多重継承単一継承をサポートします。 クラスは XNUMX つの抽象クラスのみを拡張できます。多重継承をサポートします。 クラスは複数のインターフェイスを実装できます。
コンストラクターサブクラスのインスタンスの作成時に呼び出されるコンストラクターを含めることができます。コンストラクターは直接インスタンス化できないため、コンストラクターを持つことはできません。
コードの再利用性関連するクラス間で共通のコードを共有できるようにすることで、コードの再利用性を促進します。クラスが実装する必要がある共通の動作セットを定義することにより、コードの再利用性を促進します。
柔軟性抽象化と共通機能の提供との間のバランスを提供します。抽象化と契約の指定を強調します。
使用事例 動作と属性を共有する関連クラスの階層を作成する場合に便利です。実装クラスが特定の動作を提供することを保証するコントラクトを定義するのに役立ちます。
abstract class Shape { abstract double area(); }interface Drawable { void draw(); }
<span class="notranslate">シナリオ</span>共通の基本クラスにデフォルトの動作を提供するが、特定のメソッドはサブクラスによって実装されたままにしておく場合に便利です。共通の基本クラスを指定せずに、複数のクラスにわたる動作のコントラクトまたは共有セットを定義する場合に便利です。

間の主な違い 抽象クラスとインターフェース

抽象クラス:

  • 抽象 (未実装) メソッドと具象 (実装) メソッドの両方を含めることができます。
  • 単一継承をサポートします。つまり、クラスは XNUMX つの抽象クラスのみを拡張できます。
  • オブジェクトの状態を初期化するコンストラクターを含めることができます。
  • デフォルトの動作を持つ基本クラスの作成を可能にします。
  • 抽象化と共通機能の間のバランスを提供します。
  • 共有の属性と動作を持つ関連クラスの階層を作成する場合に便利です。

インタフェース:

  • 実装は含まれず、メソッド シグネチャのみが含まれます。 すべてのメソッドは暗黙的に抽象です。
  • 多重継承をサポートします。つまり、クラスは複数のインターフェイスを実装できます。
  • インターフェイスはインスタンス化できないため、コンストラクターを持つことはできません。
  • 実装クラスが提供する必要があるメソッドのセットを指定するコントラクトを定義します。
  • 抽象化と共有の動作セットの指定を強調します。
  • コントラクトを定義し、クラスが特定の API 要件に準拠していることを確認するのに役立ちます。

まとめ

抽象クラスを使用すると、サブクラスが実装またはオーバーライドできる機能を作成できますが、インターフェイスを使用すると、機能を宣言することはできますが、実装することはできません。 クラスは XNUMX つの抽象クラスしか拡張できませんが、複数のインターフェイスを実装できます。

参照

  1. https://dl.acm.org/doi/abs/10.1145/1040305.1040314
  2. https://books.google.com/books?hl=en&lr=&id=8M3F_sSSvWkC&oi=fnd&pg=PR13&dq=+interface+java&ots=Qo15NiH18i&sig=Y6OESYd5a6G709ynnLGB4Ry97yU
ドット1
XNUMXつのリクエスト?

私はあなたに価値を提供するために、このブログ記事を書くことに多大な努力を払ってきました. ソーシャルメディアや友人/家族と共有することを検討していただければ、私にとって非常に役立ちます. 共有は♥️

ニディのアバター

私たちについて ニディ

こんにちは!私はニディです。

ここ EHL では、カジュアルなおもてなしのための美味しくて簡単なレシピがすべてです。ぜひビーチに来て、リラックスして食事を楽しんでください。

コメントを残す

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *