📘 インターフェースと継承の整理
✅ 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