インターフェース

公開日: 2026-07-29 08:42 更新日: 2026-07-29 08:42 1041文字 6 min read ... ページビュー

本稿では,オブジェクト指向設計におけるインタフェースの概念,機能,応用について紹介する。インタフェースは行為規範の制定に用いられ、クラス間の結合を低減し、多実現と統一呼び出しをサポートし、継承と実現によって機能拡張を実現でき、そしてファクトリーパターンとUMLクラス図を結合してシステム設計を行う。クラスダイアグラムの一般化、実装、依存関係、関連関係は、クラスとインタフェース間の構造と相互作用を反映している。

インターフェイス

インターフェイスの役割

インタフェースは、公開された振る舞いのセットを記述するために使用されます。主な役割は以下の通り。

  • 統一機能基準の開発。
  • 呼び出し元と実装クラスの結合を減らす。
  • 異なる実装クラスを統一されたインターフェイス型で渡して使用できるようにする。

インターフェイスの定義

interfaceキーワードでインタフェースを定義するには、次の手順に従います。

public interface IFirst {
    String NAME = "TOM";

    void firstMethod();

    default void firstMethod2() {
        System.out.println("firstMethod2");
    }

    static void firstMethod3() {
        System.out.println("firstMethod3");
    }
}

インタフェース内のフィールドはデフォルトでpublic static final修飾を使用し、本質的には定数です。通常の抽象メソッドはデフォルトでpublic abstract修飾を使用します。Java 8 以降、インターフェイスはデフォルトメソッドと静的メソッドを定義することもできる。

インタフェースは直接インスタンス化できず、実装クラスオブジェクトを作成する前にクラスによって実装されなければなりません。

インターフェイスの実装

クラスはimplementsキーワードを使用してインタフェースを実装します。クラスは複数のインタフェースを実装でき、非抽象実装クラスはインタフェース内のすべての抽象メソッドをオーバーライドしなければならない。

public class FirstImpl implements IFirst, ISecond {
    @Override
    public void firstMethod() {
        System.out.println("实现 firstMethod 方法");
    }

    @Override
    public void secondMethod() {
        System.out.println("实现 secondMethod 方法");
    }
}

呼び出しは通常、インタフェース型参照を使用してクラスオブジェクトを実装し、インタフェース指向プログラミングを行う。

public class Test {
    public static void main(String[] args) {
        IFirst first = new FirstImpl();
        ISecond second = new FirstImpl();

        first.firstMethod();
        second.secondMethod();
    }
}

インタフェース間の継承

インタフェースは、extendsを使用して1つまたは複数のインタフェースを継承できます。

public interface ITest extends IFirst, ISecond {
}
image-001
image-001

インタフェースを使用した標準の作成

例えば、複数の動画プラットフォームのリソースを集約したウェブサイトを作成するには、まず動画リソースインターフェイスを定義し、各プラットフォームに実装を提供させることができます。ビジネスコードはインターフェイスのみに依存し、プラットフォーム固有のクラスには直接依存しません。

public interface IVideo {
    void getResource(String name);
}

これにより、主要なビジネスプロセスを変更せずに実装を置き換えることができます。

ファクトリーデザインパターン

ファクトリパターンは、オブジェクトを作成するプロセスをファクトリクラスにカプセル化します。呼び出し元はファクトリ経由でインタフェースオブジェクトを取得し、クラスを実装するコンストラクタを直接使用する必要はありません。

public class VideoFactory {
    public static IVideo getVideoObject() {
        return new AQYVideo();
    }
}
public class Test {
    public static void main(String[] args) {
        IVideo video = VideoFactory.getVideoObject();
        video.getResource("xxx");
    }
}

上記のコードはまだどの実装クラスを作成するかを工場で決定していますが、呼び出し元はIVideoインタフェースのみに依存しており、具体的なクラスを直接作成するよりも結合性が低いです。

オブジェクト指向解析と設計

UMLはオブジェクト指向の分析と設計を支援する。共通図には、ユースケース図、クラス図、タイミング図、状態図、アクティビティ図などがあります。クラス図は主にクラス、インタフェース、およびそれらの間の関係を記述する。

クラス図における共通の

汎化関係

クラス間の継承関係を表し、Javaではextendsが一般的に使用されます。

関係の実現

クラス実装インタフェースを表し、Javaではimplementsを使用します。

依存関係の構築

あるオブジェクトは、あるメソッド内の別のオブジェクトを一時的に使用し、通常はメソッドの引数、ローカル変数、またはメソッドの戻り値として現れます。例えば、運転者クラスの運転メソッドは、乗り物インターフェースタイプのパラメータを受け取ることができる。

関連する関係

あるオブジェクトは別のオブジェクトを保持し、通常はメンバ変数として表現されます。例えば、プレイヤークラスで定義されたチームプロパティは1 対 1の関連付けに属し、チームクラスで複数のプレイヤーを保持する場合は1 対多の関連付けに属します。両方の当事者が互いの参照を保持する場合、双方向の関連付けがあります。

気に入ったならばコメントを残してくださいね~

... ページビュー
© 2026 跨越星轨的客 @Hoshiumi
Powered by theme astro-koharu · Inspired by Shoka