Java のインターフェイスと抽象クラス:違いは何ですか?
インターフェースとは?
インターフェイスは、クラスの実装に使用できる設計図です。インターフェイスには具体的なメソッド (コードを持つメソッド) は含まれていません。インターフェイスのすべてのメソッドは抽象メソッドです。
インターフェイスをインスタンス化できません。ただし、インターフェイスを実装するクラスはインスタンス化できます。インターフェースはインスタンス変数を含むことはありませんが、public static final 変数 (つまり、定数クラス変数) を含むことができます
抽象クラスとは
宣言にabstractキーワードを持つクラスは、抽象クラスと呼ばれます。抽象クラスには、少なくとも 1 つの抽象メソッドが必要です。 、つまり、本体のないメソッド。複数の具象メソッドを持つことができます。
抽象クラスを使用すると、具象クラスの設計図を作成できます。ただし、継承クラスは抽象メソッドを実装する必要があります。
抽象クラスはインスタンス化できません。
インターフェースを使用する重要な理由
- インターフェースは抽象化を実現するために使用されます。
- 実行時の動的メソッド解決をサポートするように設計されています
- 疎結合を実現するのに役立ちます。
- 継承階層からメソッドの定義を分離できます
抽象クラスを使用する重要な理由
- 抽象クラスは、サブクラスのデフォルト機能を提供します。
- 将来の特定のクラスのテンプレートを提供します
- サブクラスに共通のインターフェースを定義するのに役立ちます
- 抽象クラスにより、コードの再利用が可能になります。
インターフェイス対。抽象クラス
抽象クラスを使用すると、サブクラスが実装またはオーバーライドできる機能を作成できますが、インターフェイスを使用すると、機能を宣言することはできますが、実装することはできません。クラスは 1 つの抽象クラスのみを拡張できますが、クラスは複数のインターフェースを実装できます。
パラメータ | インターフェース | 抽象クラス |
---|---|---|
速度 | 遅い | 高速 |
複数の継承 | いくつかのインターフェースを実装 | 抽象クラスは 1 つだけ |
構造 | 抽象メソッド | 抽象的および具体的な方法 |
いつ使うか | 今後の機能強化 | 独立を避けるために |
継承/実装 | クラスは複数のインターフェースを実装できます | クラスは 1 つの抽象クラスのみを継承できます |
デフォルトの実装 | インターフェイスに新しいものを追加している間、すべての実装者を見つけて新しく定義されたものを実装するのは悪夢です. | 抽象クラスの場合、デフォルトの実装を利用できます。 |
アクセス修飾子 | インターフェイスにはアクセス修飾子がありません。インターフェイス内で定義されているものはすべて public 修飾子と見なされます。 | 抽象クラスはアクセス修飾子を持つことができます. |
いつ使うか | さまざまな実装がメソッド シグネチャのみを共有する場合は、インターフェイスを使用することをお勧めします。値型の多様な階層。 | 同じ種類のさまざまな実装が共通の動作を共有する場合に使用する必要があります。 |
データ フィールド | インターフェイスにデータ フィールドを含めることはできません。 | クラスはデータ フィールドを持つことができます。 |
多重継承のデフォルト | クラスは多数のインターフェースを実装できます。 | クラスは 1 つの抽象クラスのみを継承します。 |
実装 | インターフェースは抽象的であるため、コードを提供できません。 | 抽象クラスは、オーバーライドする必要がある完全なデフォルト コードを提供できます。 |
アクセス修飾子の使用 | メソッド、プロパティなどにアクセス修飾子を使用することはできません。 | アクセス修飾子を含む抽象クラスを使用できます。 |
使い方 | インターフェイスは、クラスの周辺機能を定義するのに役立ちます。 | 抽象クラスは、クラスの ID を定義します。 |
定義済みフィールド | 定義できるフィールドはありません | 抽象クラスを使用すると、フィールドと定数の両方を定義できます |
継承 | インターフェースは複数のインターフェースを継承できますが、クラスを継承することはできません。 | 抽象クラスは、クラスと複数のインターフェースを継承できます。 |
コンストラクタまたはデストラクタ | インターフェイスは、コンストラクタまたはデストラクタを宣言できません。 | 抽象クラスはコンストラクタとデストラクタを宣言できます。 |
拡張機能の制限 | 任意の数のインターフェースを拡張できます。 | 一度に 1 つのクラスまたは 1 つの抽象クラスのみを拡張できます。 |
抽象的なキーワード | abstract インターフェイス キーワードでは、メソッドを抽象として宣言するためのオプションです。 | 抽象クラスでは、abstract キーワードは、メソッドを抽象として宣言するために必須です。 |
クラスの種類 | インターフェースは公開抽象メソッドのみを持つことができます。 | 抽象クラスには、保護された公開抽象メソッドがあります。 |
Java のインターフェイスと抽象クラスのサンプル コード
以下は、Java でインターフェイスと抽象クラスを作成するサンプル コードです。
インターフェースの構文
interface name{ //methods }
Java インターフェイスの例:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
抽象クラスの構文
abstract class name{ // code }
抽象クラスの例:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }
Java