Java のインターフェイスと抽象クラスの類似点、相違点、長所と短所

WBOY
リリース: 2024-05-01 09:45:02
オリジナル
521 人が閲覧しました

インターフェイスと抽象クラスはどちらもクラス間のコントラクトを定義するためのメカニズムですが、インターフェイスは多重継承を持ち、抽象メソッドのみを含むことができますが、抽象クラスは単一継承のみをサポートし、具象メソッドと属性の両方を含むことができます。インターフェイスはコントラクト定義にさらに注意を払い、コードの再利用を促進します。抽象クラスは冗長性を減らすために部分的な継承を提供しますが、抽象クラスを変更する場合は、サブクラスも同時に変更する必要があります。実際の戦闘では、Shape インターフェースでグラフィックスの面積と周囲長を取得するメソッドが定義されており、抽象クラス Square が面積計算を実装し、その具象サブクラス SpecificSquare が周囲長計算を実装します。

接口和抽象类在 Java 中的异同与优缺点

Javaのインターフェースと抽象クラスの類似点、相違点、利点と欠点

Javaでは、インターフェースと抽象クラスはクラス間のコントラクトを定義するために使用されるメカニズムです。両者の間には類似点もあれば、重要な相違点もあります。

類似点

  • インターフェースも抽象クラスもインスタンス化できません。
  • それらにはすべてメソッド宣言が含まれていますが、実装は含まれていません。
  • サブクラスは、インターフェイスを実装するか、抽象クラス内のすべての抽象メソッドを拡張する必要があります。

違い

特徴 インターフェース 抽象クラス
アクセス修飾子 デフォルトはpublic はpublic、protected、またはdefaultのいずれかです
継承 はい継承しています複数のインターフェース は 1 つの抽象クラスのみを継承できます
実装 は抽象メソッドのみを含めることができます は抽象メソッドと具象メソッドを含めることができます
プロパティ は静的定数と最終定数のみを含めることができます プロパティを含めることができますとメソッド
インスタンス化 インスタンス化できない インスタンス化できない
インスタンスメソッド は抽象メソッドのみを含めることができます 抽象メソッドと具象メソッドを含めることができます

優れた欠点タグ

インターフェース

  • 利点:

    • 複数の実装に共通のコントラクトを提供します。
    • コードの再利用とモジュール化を促進します。
    • 多重継承をサポートします。
  • 欠点:

    • には特定の実装を含めることはできません。
    • サブクラスはすべてのインターフェイス メソッドを明示的に実装する必要があります。

抽象クラス

  • 利点:

    • には具体的な実装を含めることができ、コードの冗長性を減らすことができます。
    • インターフェースと具象クラスの間の中間オプションを提供します。
    • 部分継承をサポートし、サブクラスが実装するメソッドを選択できるようにします。
  • 欠点:

    • 単一継承のみをサポートします。
    • 抽象クラスを変更する場合は、すべてのサブクラスを変更する必要があります。

実践例

Shapeインターフェイスを定義する:

public interface Shape {
    double getArea();
    double getPerimeter();
}
ログイン後にコピー

Squareの抽象クラスと具象クラスを作成する:

public abstract class Square implements Shape {

    protected double side;

    public Square(double side) {
        this.side = side;
    }

    @Override
    public double getArea() {
        return side * side;
    }
}

public class SpecificSquare extends Square {

    public SpecificSquare(double side) {
        super(side);
    }

    @Override
    public double getPerimeter() {
        return 4 * side;
    }
}
ログイン後にコピー

Squareインターフェイスを使用する:

Shape shape = new SpecificSquare(5.0);
double area = shape.getArea();
double perimeter = shape.getPerimeter();
ログイン後にコピー

以上がJava のインターフェイスと抽象クラスの類似点、相違点、長所と短所の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート