Java の抽象クラスとインターフェイス – それらの違い

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

  • インターフェイスでは、クラスは複数のインターフェイスを実装できますが、クラスは XNUMX つの抽象クラスのみを継承できます。
  • In Interface にはアクセス修飾子がありません。 インターフェイス内で定義されるものはすべて public 修飾子を持つと想定されますが、抽象クラスはアクセス修飾子を持つことができます。
  • インターフェイスにはデータ フィールドを含めることはできませんが、抽象クラスにはデータ フィールドを含めることができます。
  • インターフェイスはクラスの周辺機能を定義するのに役立ちますが、抽象クラスはクラスのアイデンティティを定義します。

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

抽象クラスとは何ですか?

宣言内にabstractキーワードを含むクラスを抽象クラスと呼びます。 抽象クラスには、XNUMX 個以上の抽象メソッドが必要です。 つまり、本体のないメソッドです。 複数の具体的なメソッドを含めることができます。

抽象クラスを使用すると、具象クラスのブループリントを作成できます。 ただし、継承クラスは抽象メソッドを実装する必要があります。

抽象クラスはインスタンス化できません。

インターフェイスを使用する重要な理由

  • インターフェイスは達成するために使用されます 抽象化.
  • 実行時に動的なメソッド解決をサポートするように設計されています
  • これは疎結合の実現に役立ちます。
  • メソッドの定義を継承階層から分離できます。

抽象クラスを使用する重要な理由

  • 抽象クラスは、サブクラスのデフォルト機能を提供します。
  • 将来の特定のクラス用のテンプレートを提供します
  • サブクラスの共通インターフェイスを定義するのに役立ちます。
  • 抽象クラスによりコードの再利用が可能になります。

インターフェースとは?

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

インターフェイスをインスタンス化できません。 ただし、インターフェイスを実装するクラスはインスタンス化できます。 インターフェイスにはインスタンス変数が含まれることはありませんが、パブリックな静的最終変数 (つまり、定数クラス変数) が含まれる場合があります。

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

抽象クラスを使用すると、サブクラスが実装またはオーバーライドできる機能を作成できますが、インターフェイスでは機能を記述するだけで実装はできません。 クラスは複数のインターフェイスを実装できる一方で、クラスは XNUMX つの抽象クラスのみを拡張できます。

計測パラメータ インタフェース 抽象クラス
速度 遅く 尊大
複数の継承 複数のインターフェースを実装する 抽象クラスは XNUMX つだけ
Structure 抽象メソッド 抽象的な方法と具体的な方法
使用する場合 今後の強化 独立を避けるために
継承・実装 クラスは複数のインターフェースを実装できます クラスは XNUMX つの抽象クラスのみを継承できます。
デフォルトの実装 インターフェイスに新しいものを追加するときに、すべての実装者を見つけて新しく定義されたものを実装するのは悪夢です。 抽象クラスの場合は、デフォルトの実装を利用できます。
アクセス修飾子 インターフェイスにはアクセス修飾子がありません。 インターフェイス内で定義されているものはすべて public 修飾子とみなされます。 抽象クラスにはアクセス修飾子を含めることができます。
使用する場合 さまざまな実装がメソッド シグネチャのみを共有する場合は、インターフェイスを使用することをお勧めします。 値型の多態的な階層。 これは、同じ種類のさまざまな実装が共通の動作を共有する場合に使用する必要があります。
データフィールド インターフェースにデータフィールドを含めることはできません。 クラスにはデータフィールドを含めることができます。
多重継承のデフォルト クラスは多数のインターフェイスを実装できます。 クラスは抽象クラスを XNUMX つだけ継承します。
製品の導入 インターフェイスは抽象的なため、コードを提供できません。 抽象クラスは、オーバーライドする必要がある完全なデフォルト コードを提供できます。
アクセス修飾子の使用 メソッドやプロパティなどにはアクセス修飾子を使用できません。 アクセス修飾子を含む抽象クラスを使用できます。
使用法 インターフェイスは、クラスの周辺機能を定義するのに役立ちます。 抽象クラスはクラスの ID を定義します。
定義されたフィールド フィールドを定義できません 抽象クラスを使用すると、フィールドと定数の両方を定義できます
継承 インターフェイスは複数のインターフェイスを継承できますが、クラスを継承することはできません。 抽象クラスは、クラスと複数のインターフェイスを継承できます。
コンストラクターまたはデストラクター インターフェイスではコンストラクターやデストラクターを宣言できません。 抽象クラスはコンストラクターとデストラクターを宣言できます。
拡張子の制限 任意の数のインターフェイスを拡張できます。 一度に XNUMX つのクラスまたは XNUMX つの抽象クラスのみを拡張できます。
抽象的なキーワード 抽象インターフェイス キーワードでは、メソッドを抽象として宣言するためのオプションです。 抽象クラスでは、メソッドを抽象として宣言するには、abstract キーワードが必須です。
クラスタイプ インターフェイスにはパブリック抽象メソッドのみを含めることができます。 抽象クラスには、保護された抽象メソッドとパブリックな抽象メソッドがあります。

Java のインターフェイスと抽象クラスのサンプル コード

Following 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));
    }
}