Java で複数のインターフェースを実装する

Mohammad Irfan 2023年10月12日
  1. Java で複数のインターフェースを実装
  2. インターフェイスは Java で複数のインターフェイスを拡張する
Java で複数のインターフェースを実装する

このチュートリアルでは、クラスが Java で複数のインターフェースを実装する方法を紹介し、トピックを理解するためのサンプルコードもいくつかリストします。

Java では、インターフェイスはクラスに似ていますが、抽象メソッドしか持てない点が異なります。インターフェイスはクラスのブループリントと呼ばれ、インターフェイスを実装するクラスは、すべての抽象メソッドの実装を提供するか、抽象自体を宣言する必要があります。

Java では、クラスは単一のクラスのみを拡張できますが、複数のインターフェースを実装できます。それで、誰かがあなたに尋ねた場合、クラスは複数のインターフェースを実装できますか?次に、Yes と言います。

概念を理解するために、いくつかのコード例から始めましょう。これは、複数のインターフェイス実装の一般的な構造です。

class A implements B, C, D
....Z

複数のインターフェースを実装する Java コレクションの既存のクラスは次のとおりです。

開発者コードとは別に、JDK ソースに気付くと、Java が ArrayList、HashMap クラスなどの複数のインターフェース実装を使用していることがわかります。

ArrayList<E> は複数のインターフェースを実装する

public class ArrayList<E>
    extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
// Implements multiple interfaces

HashMap<K,V> は複数のインターフェースを実装する

public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, Cloneable, Serializable
// Implements multiple interfaces

Java で複数のインターフェースを実装

Java を使用すると、クラスで複数のインターフェースを実装できます。したがって、必要なだけ実装できます。この例では、3つのインターフェースを作成し、クラスを使用してそれらを実装しました。

インターフェイスを操作するときは、クラスがすべての抽象メソッドを実装していることを確認してください。3つのインターフェースすべてのすべてのメソッドを実装した以下の例を参照してください。

package javaexample;
interface A {
  void showA();
}
interface B {
  void showB();
}
interface C {
  void showC();
}
public class SimpleTesting implements A, B, C {
  public static void main(String[] args) {
    SimpleTesting st = new SimpleTesting();
    st.showA();
    st.showB();
    st.showC();
  }
  @Override
  public void showA() {
    System.out.println("Interface A");
  }
  @Override
  public void showB() {
    System.out.println("Interface B");
  }
  @Override
  public void showC() {
    System.out.println("Interface C");
  }
}

出力:

Interface A
Interface B
Interface C

インターフェイスは Java で複数のインターフェイスを拡張する

インターフェイスは、複数のインターフェイスを実装(拡張)することもできます。Java はクラスのようなインターフェースを可能にし、複数のインターフェースを実装できます。

インターフェイスの場合、インターフェイスを実装するには、implements の代わりに externds キーワードを使用する必要があります。以下の例を参照してください。

package javaexample;
interface A {
  void showA();
}
interface B {
  void showB();
}
interface C {
  void showC();
}
interface D extends A, B, C {
  void showD();
}
public class SimpleTesting implements D {
  public static void main(String[] args) {
    SimpleTesting st = new SimpleTesting();
    st.showA();
    st.showB();
    st.showC();
    st.showD();
  }
  @Override
  public void showA() {
    System.out.println("Interface A");
  }
  @Override
  public void showB() {
    System.out.println("Interface B");
  }
  @Override
  public void showC() {
    System.out.println("Interface C");
  }
  @Override
  public void showD() {
    System.out.println("Interface D");
  }
}

出力:

Interface A
Interface B
Interface C
Interface D

クラスにインターフェースを実装する場合は、抽象メソッドの実装を提供する必要があります。そうしないと、Java コンパイラーでエラーが発生します。以下の例を参照してください。

package javaexample;
interface A {
  void showA();
}
interface B {
  void showB();
}
public class SimpleTesting implements A, B {
  public static void main(String[] args) {
    SimpleTesting st = new SimpleTesting();
    st.showA();
    st.showB();
  }
  @Override
  public void showA() {
    System.out.println("Interface A");
  }
}

出力:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The type SimpleTesting must implement the inherited abstract method B.showB()

関連記事 - Java Interface