インターフェイスを利用する

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


インターフェイス

Javaには、クラスとは別の枠組みとしてインターフェイスというものが用意されています。Javaでは多重継承が認められておらず、インターフェイスはそれを補う意味合いもあります。

インターフェイスは場面によって利用法が大きく異なり、大別すると以下の 3通りに分けられます。

  1. ~able系…「~が可能である」ことを表すインターフェイス。
  2. ~Listener系…イベントの通知を行うためのインターフェイス。
  3. 名詞系…抽象クラスのようなインターフェイス。

本章では 1つめについて解説していきます。

なお、例外の解説の中で登場した Throwableは、名前こそ ~ableですが、インターフェイスではなくクラスです。

インターフェイスに関係する予約語

インターフェイスには、以下の予約語が関係してきます。

  • implements…インターフェイスを実装したクラスを作成する場合に使用する。
  • interface…インターフェイスを作成する場合に使用する。

また、インターフェイスを継承する場合には予約語 extendsを使用します。

抽象クラスとインターフェイス

抽象クラスとインターフェイス

抽象クラスはクラスであり、インターフェイスはクラスではないので決定的に異なるのですが、幾つか似ている点があります。以下に、似ているところと異なるところを列挙してみたいと思います。

抽象クラスと似ている点

  • 抽象クラスもインターフェイスも、予約語 newによってインスタンスを作ることはできない
  • 抽象クラスもインターフェイスも、参照型変数を作成することはできる
  • 抽象クラスの抽象メソッドもインターフェイスのメソッドも、メソッド名だけ決める。メソッドの中身は決めない。

抽象クラスと異なる点

  • 抽象クラスはクラスであるが、インターフェイスはクラスではない
  • 抽象クラスは抽象ではないメソッドを宣言できるが、インターフェイスは常に抽象メソッド(public abstract)となる
  • 抽象クラスはフィールドを作成できるが、インターフェイスはフィールドは常に定数(public static final)となる

インターフェイスの利用方法

この節では Runnableインターフェイスを利用する方法について解説していきます。

Runnableについて詳細が気になる方は、説明書(API)を参照してください。Java SE 7(Java 1.7)の説明書(API)を掲示しておきます→Runnableインターフェイス

Runnableインターフェイスにはメソッド runが宣言されています。Runnableインターフェイスを実装するクラスは、予約語implementsを使用して Runnableを実装し、メソッド runを実装します。その記述は、以下のような感じになります。

public class Sample implements Runnable {
	
	@Override
	public void run() {
		System.out.println("こんにちは。");
	}
}

インターフェイスで宣言されたメソッドをひとつでも実装できなかった場合には、クラスを抽象クラスにしなければなりません。

なお、Runnableインターフェイスは、次の章「スレッド」で非常に重要なインターフェイスです。

インターフェイスを利用する

早速インターフェイスを利用してみることとします。

ソースコードは以下の通り。

P101/Test.java

/**
 * テストクラスです。
 */
public class Test implements Runnable {

	@Override
	public void run() {
		System.out.println("実行しました。");
	}
	
	/**
	 * 「こんにちは。」と表示します。
	 */
	public void printHello() {
		System.out.println("こんにちは。");
	}
}

P101/P101.java

/**
 * インターフェイスを利用します。
 */
public class P101 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		// Test型インスタンスを作成し、Test型変数に紐づける
		Test test = new Test();
		test.run();
		test.printHello();
		
		// Test型インスタンスを作成し、Runnable型変数に紐づける
		Runnable runnable = new Test();
		runnable.run();
		// runnable.printHello(); // ビルドエラー
	}
}

実行結果は以下の通り。

実行しました。
こんにちは。
実行しました。

インターフェイスの型の参照型変数が作成できることが分かります。

イメージとしては以下のような感じです。このイメージの中に本来はメソッドも記述すべきですが、省略しています。

インターフェイスを利用する

インターフェイスと Objectクラス

インターフェイスはクラスではありません。したがって、インターフェイスは Objectクラスを継承していません。しかし、インターフェイス型参照変数の参照先はインスタンスには違いなく、Javaでは、すべてのインスタンスは Objectクラスを継承したクラスから作成されています。

ということで、インターフェイス型の参照型変数に対しても、Objectクラスで宣言されている toStringメソッドや equalsメソッドを呼び出すことができます。例えば、P101プロジェクトのメインメソッドに以下のような記述をしてもビルドエラーにはなりません。

		System.out.println("変数 runnableの参照先インスタンスの内容は" + runnable);
最終更新: 2014/08/01 , 公開: 2013/03/02
▲top