Menu
Coddy logo textTech

インターフェース入門

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 34/87。

abstract クラスがサブクラスに従うべき契約を定義する方法を見てきました。しかし、class に複数の契約を従わせたい場合はどうすればよいでしょうか?Java では class が複数の class を継承することはできませんが、interfaces によってこの問題を解決します。

interface は、class が何をできるかを定義する契約であり、それをどのように行うかは指定しません。abstract クラスとは異なり、interface には(デフォルトでは)実装のない method シグネチャのみが含まれます:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

interface を契約として考えてみましょう。class が interface を実装すると、その interface で宣言されたすべての methods の実装を提供することを約束します。interface は能力を定義し、class は動作を提供します。

インターフェースは、class キーワードの代わりに interface キーワードを使用して宣言します。インターフェース内のすべてのメソッドは暗黙的に public および abstract であるため、これらのキーワードを記述する必要はありません。

public interface Playable {
    void play();    // 暗黙的に public abstract
    void pause();
    void stop();
}

インターフェースでは constants も宣言できます。これらは暗黙的に public static final です。

public interface GameConstants {
    int MAX_PLAYERS = 4;  // 暗黙的に public static final
}

次のレッスンでは、クラスが implements キーワードを使用してインターフェースを実装する方法を学びます。

challenge icon

チャレンジ

簡単

さまざまなデバイスに何ができるかを説明するインターフェースを定義して、デバイス制御システムを構築しましょう。このチャレンジでは、どのように動作するかを指定せずに機能を定義する契約であるインターフェースの作成に重点を置きます。

コードを3つのファイルに整理します。

  • Switchable.java:デバイスが切り替え可能であるとはどういうことかを定義するインターフェースを作成します。切り替え可能なデバイスは、電源をオンにしたりオフにしたりできる必要があります。2つのメソッド、turnOn()turnOff() を Declare します。Remember、interface のメソッドは implicitly public and abstract なので、メソッドシグネチャだけが必要です。
  • Adjustable.java:デバイスが調整可能であるとはどういうことかを定義する、もう1つのインターフェースを作成します。調整可能なデバイスは、その level を設定できる必要があります。setLevel(int level) というメソッドを Declare します。また、値が 100 の定数 MAX_LEVEL も Include します。Remember、インターフェース内の定数は implicitly public static final です。
  • Main.java:インターフェースが正しく定義されていることを、それらに関する information を Print して示します。1つの input、level の値(int)を受け取ります。次の3行を Print します。
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value](Adjustable インターフェースから定数にアクセスします)
    続けて、Setting level to: [input level] と Print します。

1つの input、level の値(int)を受け取ります。

このチャレンジでは、機能を説明する設計図であるインターフェースの定義だけに重点を置きます。次のレッスンでは、class がこれらのインターフェースを実際にどのように実装して、具体的な動作を提供するのかを学びます。

自分で試してみよう

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: インターフェースに関する情報を出力する
        // Print: "Switchable methods: turnOn, turnOff"
        // Print: "Adjustable methods: setLevel"
        // Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
        // Print: "Setting level to: " followed by the input level
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ