プログラミングの用語一覧へ
このページの目次
プログラミング中級図解あり

interfaceとは?

読み方:interface

最終更新:2026/08/18

3秒でわかる

実装を持たずメソッドの並びだけを決める。呼ぶ側を具体的なクラスから切り離し、後から差し替えられる設計にするために使います。

30秒図解

interfaceはNotifierの契約だけを示し、MailNotifierの実装をOrderServiceへ渡しても、差し替え時に利用側を変えずに済む
interfaceは「何ができるか」を契約にし、「どうやるか」を実装側へ分けます。

もう少し詳しく

どういうものか

interface は「このメソッドを持っていること」だけを宣言する型です。中身の処理は書かず、実装するクラス側が用意します。Java では implements で宣言し、一つのクラスがいくつでも実装できます。抽象クラスと違ってフィールドの状態を持たないため、継承の縦の関係とは別に、横断的な役割を後付けできます。

Java 8 以降は default メソッドで既定の実装を持たせられるようになり、static メソッドも書けます。それでもインスタンスの状態を持てない点は変わりません。

なぜ必要か

呼ぶ側が具体的なクラス名を知っていると、差し替えのたびに呼ぶ側まで書き換えることになります。引数の型を interface にしておけば、通知をメールからチャットへ変えても、送信処理を受け取る側のコードは一行も変わりません。テストのときに本物の外部サービスの代わりに記録だけする実装を渡せるのも同じ理由です。

具体例

public interface Notifier { void send(String message); } public class MailNotifier implements Notifier { @Override public void send(String message) { System.out.println("mail " + message); } } public class OrderService { private final Notifier notifier; public OrderService(Notifier notifier) { this.notifier = notifier; } public void complete(String orderId) { notifier.send("order done " + orderId); } }

OrderService は MailNotifier を知りません。コンストラクタに何を渡すかだけで振る舞いが決まります。

つまずきやすいところ

まず、interface のメソッドは既定で public です。実装側でうっかり修飾子を省くと、可視性が下げられないというエラーになります。

次に、実装忘れです。抽象メソッドを一つでも書き残すとコンパイルが通らないので、実装のつもりがオーバーロードになっていないか(引数の型が違っていないか)を確認します。@Override を付けておけば、この取り違えはコンパイル時に見つかります。

もう一つ、interface を作ること自体が目的になりがちです。実装が一つしかなく差し替える予定もないなら、素直にクラスのままにしておくほうが読みやすくなります。

似た用語との違い

比較interface抽象クラス
状態持てないフィールドを持てる
多重複数実装できる継承は一つだけ
使い分け役割や契約を表す共通の実装を共有する


覚え方

interface は「何ができるか」の一覧、クラスは「どうやるか」の中身。呼ぶ側には一覧だけを見せる、と考えると設計が整理できます。

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地interfaceプログラミング

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

この用語を扱うコース

コース

Java入門:基礎文法編

69レッスン
コース

Java 中級:コレクション・Stream・例外処理

64レッスン
コース

Java Silver対策

55レッスン
Javaコースの全編を見る