0Pricing
Java Academy · レッスン

実践で使うインターフェース

インターフェースを型として使い、メソッドに渡し、実装を簡単に入れ替えます。柔軟なコードのための小さなパターンを練習します。

「実践で使うインターフェース」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。

概要

インターフェースの実践: 能力を型として扱い、呼び出し側を具象クラスから独立させます。インターフェースをメソッドに渡したり、リストに格納したり、必要に応じて別の実装に置き換えたりできます。

インターフェースをパラメーターにする

メソッドがインターフェース型をパラメーターとして受け取ると、柔軟性が高まります:

  • 呼び出し側のコードを変更せずに済みます。
  • 異なるクラスが同じ契約を実装して利用できます。
  • テストではFakeやStubを差し替えて、すばやく試せます。

コード: Printableの機能

このメソッドは具体的なクラスではなく、Printableという契約を使用しているため、実装を変更しても呼び出し側のコードは変わりません。

public class Main {
  // 1) Define a tiny capability
  static interface Printable { void print(); }

  // 2) Two implementations
  static class TextDoc implements Printable {
    public void print() { System.out.println("[TextDoc] Printing text pages"); }
  }
  static class Photo implements Printable {
    public void print() { System.out.println("[Photo] Printing a photo"); }
  }

  // 3) A method that depends on capability, not class
  static void runJob(Printable p) {
    p.print(); // caller does not care which class it is
  }

  public static void main(String[] args) {
    runJob(new TextDoc());
    runJob(new Photo());
  }
}

インターフェースを戻り値の型にする

ファクトリメソッドがインターフェースを返すことがあります。呼び出し側に見えるのは能力だけで、実際のクラスを知る必要はありません。これにより依存関係が減り、モジュール性が高まります。

コード: Formatterを使ったStrategy

同じメソッドが、異なるFormatterの実装で動作します。クラスを変更せずに振る舞いを変更できました。

public class Main {
  // Strategy: different ways to format text
  static interface Formatter { String format(String s); }

  static class UpperFormatter implements Formatter {
    public String format(String s) { return s.toUpperCase(); }
  }
  static class LowerFormatter implements Formatter {
    public String format(String s) { return s.toLowerCase(); }
  }

  // Uses any Formatter
  static String show(String title, Formatter f) {
    return title + " -> " + f.format(title);
  }

  public static void main(String[] args) {
    System.out.println(show("Hello", new UpperFormatter()));
    System.out.println(show("Hello", new LowerFormatter()));
  }
}

コード:インターフェース一覧

配列やリストの要素型にはインターフェース型を指定できます。ループは同じ呼び出しを行い、各要素が自身の実装を実行します。

public class Main {
  static interface Task { void run(); }

  static class EmailTask implements Task { public void run(){ System.out.println("Send email"); } }
  static class ReportTask implements Task { public void run(){ System.out.println("Generate report"); } }
  static class CleanupTask implements Task { public void run(){ System.out.println("Clean temp files"); } }

  public static void main(String[] args) {
    Task[] queue = { new EmailTask(), new ReportTask(), new CleanupTask() };
    for (int i = 0; i < queue.length; i = i + 1) {
      queue[i].run(); // same call, different behavior
    }
  }
}

インターフェース練習チェック

クイックチェック:「インターフェースに対してプログラミングする」と便利なのはなぜですか?

まとめ

まとめ:パラメーター、戻り値、コレクションにインターフェース型を使うと、コードが柔軟になります。実装を差し替えたり、テストでモックオブジェクトを使ってすばやく試したりできます。

よくある質問

「実践で使うインターフェース」レッスンは無料ですか?

はい。「実践で使うインターフェース」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。

「実践で使うインターフェース」で何を学びますか?

インターフェースを型として使い、メソッドに渡し、実装を簡単に入れ替えます。柔軟なコードのための小さなパターンを練習します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Java Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「実践で使うインターフェース」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJava Academyレッスンでコードを書いて実行できますか?

はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 実践で使うインターフェース
  2. ジェネリクスの基礎(T、型推論)
  3. ジェネリックメソッドとジェネリッククラス
← Java Academyに戻る