📝

HTMLフォームの基本と自己紹介ページ作成練習

に公開

📘 インターフェースと継承の整理


✅ 1. インターフェースとは?

  • interface機能だけを約束し、実装はクラスに任せる構造
  • Javaにおいてinterfaceは基本的にpublic abstractメソッドのみを含む
  • 複数の実装が可能(例:implements A, B

🔹 基本構造の例

interface Scan {
    int scanNum = 2; // public static final
    void doScan();   // public abstract

    default void prePaper() {
        System.out.println("Prepaper");  // デフォルト実装
    }

    static void prePower() {
        System.out.println("Power");     // staticメソッド
    }

    private void helper() {
        System.out.println("ヘルパーメソッド"); // インターフェース内部専用
    }
}

✅ 2. クラスの継承 (extends)

  • クラスは1つのクラスのみを継承可能(単一継承)
  • **「is-a 関係」**のときに使用(例:Student is a Person
  • 属性と機能を共に継承する

🔹 例

class Person {
    String name;
    void sayHello() { ... }
}

class Student extends Person {
    void study() { ... }
}

✅ 3. インターフェース vs クラス継承の違い

区分 インターフェース(implements クラス継承(extends
目的 動作の約束 機能の再利用
継承数 ✅ 複数可 ❌ 1つのみ
メソッド実装 必ず実装が必要(abstract 一部再利用可
含まれる要素 メソッドシグネチャ + default/static メソッド + 属性

✅ 4. defaultメソッドとは?

  • Java 8以降、インターフェースで基本実装が可能に
  • オーバーライド可能だが、しなくてもエラーにならない
default void prePaper() {
    System.out.println("Prepaper");  // デフォルト動作提供
}

✅ 5. privateメソッドとは?

  • Java 9以降、インターフェース内部の共通ロジック整理のため使用
  • インターフェース内部でのみ使用可能
  • 外部クラスや実装クラスからの呼び出し不可

✅ 6. 多重継承とインターフェース

  • Javaではクラスの多重継承 ❌ 禁止
  • インターフェースの多重実装 ✅ 可能
  • 衝突がある場合、必ずoverrideで明示的に解決が必要
interface A {
    default void hello() { System.out.println("A"); }
}

interface B {
    default void hello() { System.out.println("B"); }
}

class C implements A, B {
    @Override
    public void hello() {
        A.super.hello(); // 明示的に指定
    }
}

✅ 7. インターフェース分離の原則(ISP)

  • 1つのインターフェースは1つの役割だけ持つべき
  • 不要な機能まで実装しないように、分割して設計
interface Printer { void print(); }
interface Scanner { void scan(); }

class OldPrinter implements Printer {
    public void print() {
        System.out.println("印刷します。");
    }
}

🧠 重要ポイントまとめ

ポイント
1つのインターフェース = 1つのルール
defaultは「基本実装」、overrideは任意
abstractは「必ず実装しなければならない約束」
implementsは複数可、extendsは1つのみ

Discussion