抽象クラスとインターフェースの違い Java
抽象クラスとインターフェースの主な違い Java
- インターフェイスでは、クラスは複数のインターフェイスを実装できますが、クラスは XNUMX つの抽象クラスのみを継承できます。
- In Interface にはアクセス修飾子がありません。 インターフェイス内で定義されるものはすべて public 修飾子を持つと想定されますが、抽象クラスはアクセス修飾子を持つことができます。
- インターフェイスにはデータ フィールドを含めることはできませんが、抽象クラスにはデータ フィールドを含めることができます。
- インターフェイスはクラスの周辺機能を定義するのに役立ちますが、抽象クラスはクラスのアイデンティティを定義します。
抽象クラスとは何ですか?
宣言に abstract キーワードがあるクラスは、抽象クラスと呼ばれます。抽象クラスには、0 個以上の抽象メソッド (つまり、本体のないメソッド) が必要です。複数の具象メソッドを持つことができます。抽象クラスを使用すると、具象クラスの設計図を作成できます。ただし、継承クラスは抽象メソッドを実装する必要があります。抽象クラスはインスタンス化できません。
インターフェイスを使用する重要な理由
- インターフェイスは達成するために使用されます 抽象化.
- 実行時に動的なメソッド解決をサポートするように設計されています
- これは疎結合の実現に役立ちます。
- メソッドの定義を継承階層から分離できます。
抽象クラスを使用する重要な理由
- 抽象クラスは、サブクラスのデフォルト機能を提供します。
- 将来の特定のクラス用のテンプレートを提供します
- サブクラスの共通インターフェイスを定義するのに役立ちます。
- 抽象クラスによりコードの再利用が可能になります。
インターフェースとは何ですか?
インターフェースは、クラスを実装するために使用できる設計図です。インターフェースには、具体的なメソッド (コードを持つメソッド) は含まれません。インターフェースのすべてのメソッドは抽象メソッドです。インターフェースはインスタンス化できません。ただし、インターフェースを実装するクラスはインスタンス化できます。インターフェースにはインスタンス変数は含まれませんが、public static final 変数 (つまり、定数クラス変数) は含まれます。
インターフェースと抽象クラスの違い Java
抽象クラスを使用すると、サブクラスが実装またはオーバーライドできる機能を作成できますが、インターフェイスでは機能を記述するだけで実装はできません。 クラスは複数のインターフェイスを実装できる一方で、クラスは XNUMX つの抽象クラスのみを拡張できます。
Parameters | インタフェース | 抽象クラス |
---|---|---|
速度 | 遅く | 尊大 |
複数の継承 | 複数のインターフェースを実装する | 抽象クラスは XNUMX つだけ |
Structure | 抽象メソッド | 抽象的な方法と具体的な方法 |
使用する場合 | 今後の強化 | 独立を避けるために |
継承・実装 | クラスは複数のインターフェースを実装できます | クラスは XNUMX つの抽象クラスのみを継承できます。 |
デフォルトの実装 | インターフェイスに新しいものを追加するときに、すべての実装者を見つけて新しく定義されたものを実装するのは悪夢です。 | 抽象クラスの場合は、デフォルトの実装を利用できます。 |
アクセス修飾子 | インターフェイスにはアクセス修飾子がありません。 インターフェイス内で定義されているものはすべて public 修飾子とみなされます。 | 抽象クラスにはアクセス修飾子を含めることができます。 |
使用する場合 | さまざまな実装がメソッド シグネチャのみを共有する場合は、インターフェイスを使用することをお勧めします。 値型の多態的な階層。 | これは、同じ種類のさまざまな実装が共通の動作を共有する場合に使用する必要があります。 |
データフィールド | インターフェースにデータフィールドを含めることはできません。 | クラスにはデータフィールドを含めることができます。 |
多重継承のデフォルト | クラスは多数のインターフェイスを実装できます。 | クラスは抽象クラスを XNUMX つだけ継承します。 |
製品の導入 | インターフェイスは抽象的なため、コードを提供できません。 | 抽象クラスは、オーバーライドする必要がある完全なデフォルト コードを提供できます。 |
アクセス修飾子の使用 | メソッドやプロパティなどにはアクセス修飾子を使用できません。 | アクセス修飾子を含む抽象クラスを使用できます。 |
使用法 | インターフェイスは、クラスの周辺機能を定義するのに役立ちます。 | 抽象クラスはクラスの ID を定義します。 |
定義されたフィールド | フィールドを定義できません | 抽象クラスを使用すると、フィールドと定数の両方を定義できます |
継承 | インターフェイスは複数のインターフェイスを継承できますが、クラスを継承することはできません。 | 抽象クラスは、クラスと複数のインターフェイスを継承できます。 |
コンストラクターまたはデストラクター | インターフェイスではコンストラクターやデストラクターを宣言できません。 | 抽象クラスはコンストラクターとデストラクターを宣言できます。 |
拡張子の制限 | 任意の数のインターフェイスを拡張できます。 | 一度に XNUMX つのクラスまたは XNUMX つの抽象クラスのみを拡張できます。 |
抽象的なキーワード | 抽象インターフェイス キーワードでは、メソッドを抽象として宣言するためのオプションです。 | 抽象クラスでは、メソッドを抽象として宣言するには、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)); } }