Java インターフェース完全解説:定義・実装・実践例
Java インターフェースとは?
Java インターフェース は、クラスの契約を定義する抽象型です。定数と抽象メソッドを宣言できますが、状態を保持できません。すべてのメソッドは暗黙的に public と abstract であり、クラスは複数のインターフェースを実装して必要な振る舞いを提供できます。
インターフェースの宣言
interface MyInterface {
// 抽象メソッド
}
インターフェースの実装
class Dog implements Pet {
// Pet のメソッドを実装
}
インターフェースの拡張
interface RidableAnimal extends Animal, Vehicle {
// 追加の抽象メソッド
}
なぜインターフェースが必要か?
インターフェースは「何をするか(What)」と「どう実現するか(How)」を分離します。ポリモーフィズムを可能にし、疎結合を促進し、Java がクラスでサポートしない「多重継承」問題を解決します。
例えば、MediaPlayer に CDPlayer と DVDPlayer サブクラスがあり、それぞれ独自の play() 実装を持つとします。あるクラスが両方の機能を必要とする場合、Java はクラスの多重継承を禁じますが、インターフェースなら振る舞いをクリーンに組み合わせられます。


同様に、Dog クラスが Animal を継承し、Pet インターフェースを実装すれば、継承と契約の両方を満たせます。

Java インターフェース例
ステップ 1: 以下のコードを記述:
interface Pet {
void test();
}
class Dog implements Pet {
@Override
public void test() {
System.out.println("Interface method implemented");
}
public static void main(String[] args) {
Pet p = new Dog();
p.test();
}
}
ステップ 2: コンパイルして実行し、出力を確認。
クラス vs インターフェース
| クラス | インターフェース |
|---|---|
| インスタンス化可能で状態を持てる | インスタンス化不可、定数とメソッドシグネチャのみ |
| 具象(実装済み)メソッドを持てる | Java 8 以前は具象メソッド不可。Java 8 以降は default と static メソッド可能 |
アクセス修飾子は private、protected、public | すべてのメンバーは暗黙的に public(フィールドは static final) |
インターフェース vs 抽象クラス:使い分け
- 抽象クラス: 関連クラス間で共通の基底実装や共有状態が必要な場合
- インターフェース: 無関係なクラスが採用できる役割や能力を定義する場合
インターフェースの重要事実
- クラスは複数のインターフェースを実装可能だが、宣言されたすべてのメソッドを実装しなければならない
- インターフェースは直接インスタンス化できず、契約として機能する
- インターフェース参照は実装クラスを指せる
- インターフェースは1つ以上の他のインターフェースを拡張可能
- ネストインターフェース(他のインターフェースやクラス内)が可能
- 同じ名前で異なる戻り値型のメソッドを2つのインターフェースが宣言し、クラスが両方を実装することは不可
- Java 8 からインターフェースに
defaultとstaticメソッドを含められる
まとめ
- インターフェースは契約を定義し、クラスが実装を提供する
- すべてのインターフェースメソッドは暗黙的に
publicとabstract(default/static除く) - インスタンス化不可だが、変数で参照可能
- ポリモーフィズム実現と Java の単一継承制限回避にインターフェースを活用
Java
- C#抽象クラス実践チュートリアル:コード例で理解する設計パターン
- C#インターフェース完全解説:定義、実装例、実践的活用法
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java Hello World:最初のJavaプログラム作成ステップバイステップガイド
- Java String.length()メソッド:文字列サイズ取得の実例解説
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き
- Java インターフェース vs 抽象クラス:適切な抽象化の選び方
- Java BufferedReader でファイル読み込み:実践ガイドと例
- Javaで挿入ソート:わかりやすい例とステップバイステップガイド
- Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース