はじめてのインタフェース
このページではJavaでのインタフェースの概要について説明をします。
インタフェースの特徴・利点
インタフェースとは、ある特定の機能の概要を記述したものです。インタフェースを実装したクラスは、同一のインタフェースを実装したクラスとの間においてある特定の機能の概要を共通に持ちます。機能概要の詳細はそれぞれのクラスで定義します。

インタフェースの利点の1つとしてクラスが複数のインタフェースを実装できると言うのがあります。ある特定の機能の概要をクラスに実装する方法としてextendsを使用してスーパークラスを継承すると言う方法もあります。しかしこの場合複数のスーパークラスを継承することはできません。Javaでは複数のスーパークラスの継承(多重継承)が認められていないためです。
また、extendsによりスーパークラスを継承すると言うことは継承したサブクラスと継承されたスーパークラスの間にクラス関係を持つと言うことになります。スーパークラスとサブクラスの間にクラス関係が見受けられない場合においてもこのような継承を行うことはクラス設計上不適切です。このような場合はインタフェースを使用します。インタフェースの実装はクラス関係に依存しません。
クラスの継承を利用した場合

インタフェースを利用した場合

インタフェースの使用例
挨拶を行うインタフェースと日付を表示するインタフェースを作成し、それぞれをクラスで実装します。
例1
Greeting.javaファイル
//(1)インタフェースGreetingの作成
interface Greeting {
void greet(); //(2)インタフェース内ではヘッダー定義のみ
}
ShowingDate.javaファイル
//(3)インタフェースShowingDateの作成
interface ShowingDate {
void showDate(); //(4)インタフェース内ではヘッダー定義のみ
}
ExInterface1.javaファイル
import java.text.*;
import java.util.*;
//(5)インタフェースGreetingとShowingDateの実装
public class ExInterface1 implements Greeting, ShowingDate{
public void greet() { //(6)メソッドgreetの本体の定義
System.out.println("こんにちは");
}
public void showDate() { //(7)メソッドshowDateの本体の定義
SimpleDateFormat dateformatter =
new SimpleDateFormat("yyyy/MM/dd");
String dateString = dateformatter.format(new Date());
System.out.println(dateString);
}
public static void main(String[] args) {
ExInterface1 object1 = new ExInterface1(); //(8)
object1.greet(); //(9)
object1.showDate(); //(10)
}
}
解説1
- (1)挨拶を行うインタフェースGreetingを作成します。
- (2)メソッドgreetを定義します。インタフェース内ではヘッダーの定義のみで本体の定義は、インタフェースを実装したクラス内で行います。
- (3)日付を表示するインタフェースShowDatingを作成します。
- (4)メソッドshowDateを定義します。インタフェース内ではヘッダーの定義のみで本体の定義は、インタフェースを実装したクラス内で行います。
- (5)クラスExInterface1を定義し、インタフェースGreetingとShowingDateを実装します。インタフェースの実装にはimplementsを使用します。
- (6)インタフェース内で定義されたメソッドgreetの本体を定義します。メソッドの本体の定義はインタフェースを実装したそれぞれのクラスの中で行います。インタフェース内で定義したのはヘッダーのみで、「日本語で挨拶文を表示するか」、「英語で挨拶文を表示するか」など具体的な本体はそれぞれのクラス内で定義します。
- (7)インタフェース内で定義されたメソッドshowDateの本体を定義します。ここでは、SimpleDataFormatクラスを使用し、プログラム実行時の日付を「yyyy/mm/dd」フォーマットに従い出力しています。
- (8)クラスExInterface1のオブジェクトobject1を生成します。
- (9)メソッドgreetを実行します。
- (10)メソッドshowDateを実行します。
実行結果1
D:\JAVA>javac ExInterface1.java
D:\JAVA>java ExInterface1
こんにちは
2003/04/13
D:\JAVA>

1はじめてのインタフェース