インターフェース: 契約
実装を強制する抽象型。多重継承も可能。
インターフェース
契約(抽象メソッドの集合)。
default
デフォルト実装を提供。
関数型
抽象メソッド1つ。ラムダで実装。
インターフェース
// インターフェースの定義public interface Drawable { void draw(); // 抽象メソッド
default void reset() { // デフォルトメソッド System.out.println("Reset"); }
static void info() { // 静的メソッド System.out.println("Drawable interface"); }}
// 実装public class Circle implements Drawable { @Override public void draw() { System.out.println("Drawing circle"); }}
// 使用Drawable d = new Circle();d.draw(); // Drawing circled.reset(); // ResetDrawable.info(); // Drawable interface実行結果
Drawing circle\nReset\nDrawable interface
Bad
// ❌ Bad: 具象クラスに依存public void process(ArrayList<String> list) { // ArrayList にしか使えない}Good
// ✅ Good: インターフェースに依存public void process(List<String> list) { // ArrayList, LinkedList 等すべてに対応}パターン
// 複数インターフェースを実装public class Robot implements Movable, Speakable { @Override public void move() { ... }
@Override public void speak() { ... }}
// 関数型インターフェース (Java 8+)@FunctionalInterfacepublic interface Processor { void process(String input); // 抽象メソッド1つだけ}
// ラムダで実装Processor p = input -> System.out.println(input);p.process("Hello");
// 組み込み関数型インターフェースFunction<String, Integer> length = String::length;Predicate<Integer> isEven = n -> n % 2 == 0;Consumer<String> printer = System.out::println;Supplier<Double> random = Math::random; Tip: 具象クラスではなくインターフェースに依存する。
合格ライン
default メソッドを書ける
関数型インターフェースをラムダで実装できる
参考リンク
演習課題
課題1: インターフェース実装
Comparable を実装してオブジェクトをソートしてください。
課題2: default メソッド
default メソッドを持つインターフェースを作成してください。