JAVA は、オブジェクト指向プログラミングのさまざまな主要な機能を使用するオブジェクト指向プログラミング言語です。 抽象化は、ユーザーが実装の複雑さを隠し、よりシンプルな実装テクニックを提供できる機能の XNUMX つです。 Java では、インターフェイスまたは抽象クラスのいずれかを使用してこれを実現します。
抽象クラスとインターフェイスは抽象化に関連しますが、同じ意味で使用することはできません。 したがって、インターフェイスをいつ使用するのか、いつ抽象クラスを使用するのかに注意し、適切なオプションを選択することが重要です。
抽象クラス vs Iインターフェース
抽象クラスとインターフェイスの主な違いは、関数型インターフェイスは静的メソッドやデフォルト メソッドとは別に、XNUMX つの抽象メソッドのみで構成されることです。 この機能により、宣言される抽象メソッドの数を制限できますが、抽象クラスで宣言される抽象メソッドの数を制限することはできません。
抽象クラスは、abstract キーワードを使用して宣言された単なるクラスです。 これにより、サブクラスに宣言されたすべてのメソッドの実装が強制され、abstract キーワードを使用してメソッド シグネチャを記述できるようになります。 クラスに抽象メソッドがある場合、そのクラスも抽象メソッドでなければならないと仮定します。
インターフェイスは、クラス実装の設計図として機能します。 インターフェイスには具体的なメソッドはなく、すべてのメソッドは抽象です。 インターフェイスはインスタンス化できませんが、その一方で、インターフェイスを実装するクラスはインスタンス化できます。 インスタンス変数はインターフェイスでは決して使用されません。 ただし、パブリックの静的最終変数は使用できます。
アブストラクト C の比較表ガラス and私インターフェース
計測パラメータ | 抽象クラス | インタフェース |
速度 | 尊大 | 遅く |
クラスタイプ | public 抽象メソッドと protected 抽象メソッドの両方を持つことができます。 | パブリック抽象メソッドのみを持つことができます |
フィールドの定義 | 定数とフィールドの両方を定義できます。 | フィールドを定義できません。 |
使用法 | 自給自足を防ぐために。 | 今後の機能強化。 |
Structure | 抽象メソッドと具象メソッド、つまりコードのないメソッドの両方があります。 | 抽象メソッドのみを持ちます。 |
拡張制限 | 現時点では、XNUMX つのクラスまたは XNUMX つの抽象クラスのみを拡張します。 別の通常の (または具体的な) クラスを拡張できます。 | 任意の数のインターフェイスを拡張できます。 ただし、拡張できるのはインターフェースのみです。 |
デフォルトの実装 | デフォルトのメソッド実装を持つことができます。 | 抽象化を提供するため、まったく実装できません。 |
使用されたキーワード | 抽象クラスはキーワード「extends」を使用します。 | インターフェイスは、キーワード 'implements. |
複数の継承 | 他の型を拡張し、いくつかの Java インターフェイスを実装する場合があります。 | このインターフェースによって拡張できるのは、別の Java インターフェースだけです。 |
変数タイプ | 最終、非最終、静的、および非静的変数が使用されます。 | 最終変数と静的変数があります。 |
この試験は iアブストラクト Cガラス?
キーワード「abstract」は、抽象クラスを宣言するために使用されます。 抽象クラスには少なくとも XNUMX つの抽象メソッドが存在する必要があります。 具体的な方法はいろいろあるかもしれません。 抽象クラスを使用して、具象クラスのブループリントを生成できます。 ただし、抽象メソッドは継承クラスで実装する必要があります。 抽象クラスをインスタンス化することはできません。
抽象クラスを使用する利点は次のとおりです。
- サブクラスがオーバーライドする共通の基本クラス メソッドを与えることによって、コードで継承の概念を利用しようとする場合。
- オブジェクトの状態を調整するために非最終または非静的メソッドが必要な場合。
- コードの再利用に役立ちます。
- 指定された要件を満たし、部分的な実装の詳細を提供します。
プログラミング言語における抽象化とは、重要な要素に集中できるように、重要でない要素をユーザーから隠し、それによって効率を高め、複雑さを軽減することを指します。
抽象クラスは、サブクラスの共通の特性をキャプチャし、抽象メソッドを含む場合と含まない場合があります。 インスタンス化することはできませんが、そのサブクラスによってスーパークラスとしてのみ使用できます。
構文:
抽象クラス名 {
//ステートメント
}
この試験は i私インターフェース?
Java の基本概念の XNUMX つはインターフェイスです。 Java インターフェイスは Java プログラミング言語の基本コンポーネントであり、JDK および Java デザイン パターンで広く利用されています。 大部分のフレームワークは Java インターフェイスに強く依存しています。 「インターフェース」をキーワードに作成されています。
インターフェイスを使用する利点は次のとおりです。
- インターフェイスは絶対的な抽象化を実現するために使用されます。
- すべてのインターフェイス プロパティはデフォルトで public、static、final であるため、アクセス修飾子を追加する必要はありませんが、追加してもコンパイラはエラーを出しません。
- 実行時の動的メソッド解決をサポートするように設計されています。
- 複数の継承を使用して問題を解決する必要があり、異なるクラス階層で構成されている場合に役立ちます。
クラスと同様に、メソッドと変数の両方を含めることができます。 ただし、インターフェイスで宣言されたメソッドはデフォルトでは抽象です。
構文:
インターフェース名{
//メソッド
}
主な違いs 抽象クラス間 aJava の nd インターフェイス
- 抽象クラスとインターフェイスの最も重要な違いは、インターフェイスにはインスタンス変数がないため、非抽象メソッドが変更できる状態を持つことができないことです。
- コンストラクターは抽象クラス内で指定できますが、Java のインターフェイス内では指定できません。これは、デフォルト メソッドを持つインターフェイスと抽象クラスの間のもう XNUMX つの意味上の区別です。
- Abstract クラスの場合、デフォルトの実装を活用できますが、インターフェイスでは、すべての実装者を見つけて実装するのは悪夢です。
- 抽象クラスがクラスのアイデンティティを定義するのに対し、インターフェースは周辺機能を定義するのに役立ちます。
- 抽象クラスは XNUMX つのクラスと複数のインターフェイスを継承できますが、インターフェイスは複数のインターフェイスのみを継承でき、クラスは継承できません。
- コンストラクターとデストラクターは抽象クラスで定義できますが、インターフェイスでは定義できません。
- 抽象クラスとインターフェイスのもう XNUMX つの違いは、抽象クラスは「extends」キーワードで展開できることです。 インターフェイス クラスを実装するには、キーワード「implements」を使用できます。
まとめ
Java では、抽象クラスとインターフェイスの違いは、抽象クラスが抽象化を実装するのに対し、インターフェイスは抽象化と多重継承の両方を実装することです。
すべてではないが、クラスが実行する特定のメソッドを含むクラスを設計する XNUMX つのアプローチは、抽象クラスとインターフェイスです。 これら XNUMX つは静的に異なり、別々の方法で取得されます。 ただし、動的な使用法という点では、これらは同じです。
抽象クラスはいくつかの点でインターフェイスに似ています。つまり、ユーザーはインスタンスを作成できません。 第 XNUMX に、両方のメソッドには、実装の有無にかかわらず、宣言および定義された一連のメソッドが含まれている可能性があります。