インターフェース

ポリモーフィズムを実現させるにはいくつかの方法があります。ここでは、インターフェースについてみてみましょう。インターフェースは、メンバー変数や抽象メソッドで構成されます。インターフェースは「interface」キーワードを使って定義します。

インターフェース定義の書式
interface インターフェース名{
  抽象メソッド定義…
}

インターフェースはインスタンスを生成できません。別のクラスで実装し、抽象メソッド等をオーバーライドして利用することができるようになります。 実装はクラスの継承と違い、カンマ区切りで複数指定することができます。

インターフェース実装の書式1
class クラス名 implements インターフェース名, インターフェース名…{
  各種定義…
  抽象メソッドのオーバーライド
}
インターフェース実装の書式2
class サブクラス名 extends スーパークラス名 emplements インターフェース名{
  各種定義…
  抽象メソッドのオーバーライド
}

○ ファイル

次のようにファイルを作成してください。

ファイル名 IDrip.java

サンプルダウンロード

○ プログラム

インターフェースを作成しましょう。今回はドリップを表すインターフェースを作成します。このインターフェースは、主に飲み物に実装させる予定です。実装したクラスでは飲み物の注ぎ方を定義させます。

IDrip.java

  1. interface IDrip{
  2.     String drip();
  3.     String dripWithMilk();
  4. }

○ クラス図

IDripインターフェース

○ 解説

2、3行目では、抽象メソッドを宣言しています。メソッドの仕様は決まっているので、このメソッドを使用するにはオーバーライドして処理を実装する必要があります。

○ ファイル

次のようにファイルを作成してください。

ファイル名 Coffee.java

サンプルダウンロード

○ プログラム

次に、ドリップインターフェースを実装したコーヒークラスを作成しましょう。

Coffee.java

  1. public class Coffee implements IDrip{
  2.     //フィールド
  3.     private String name = "コーヒー";
  4.     //注ぐメソッドをオーバーライド
  5.     public String drip(){
  6.         return this.name;
  7.     }
  8.     //ミルクと一緒にそそぐメソッドをオーバーライド
  9.     public String dripWithMilk(){
  10.         return "ミルク" + this.name + "(微糖)";
  11.     }
  12. }

○ クラス図

Coffeeクラス

○ 解説

6~8行目では、IDripインターフェースのdripメソッドをオーバーライドしています。このメソッドはフィールドに設定されている飲み物を返します。今回はコーヒーが注がれるイメージとして文字列を返しています。

11~13行目では、IDripインターフェースのdripWithMilkメソッドをオーバーライドしています。このメソッドはミルクとコーヒーを返すことでミルクコーヒーを注ぎます。

○ ファイル

次のようにファイルを作成してください。

ファイル名 InterfaceTest.java

サンプルダウンロード

○ プログラム

では次にCoffeeクラスを利用するプログラムを作成しましょう。次のように記述してください。

InterfaceTest.java

  1. public class InterfaceTest{
  2.     public static void main(String[] args){
  3.         //コーヒーオブジェクトを生成
  4.         Coffee coffee = new Coffee();
  5.         //コーヒーを注いでみる
  6.         System.out.println("drip:" + coffee.drip());
  7.         //ミルクも一緒に注いでみる
  8.         System.out.println("dripWithMilk:" + coffee.dripWithMilk());
  9.     }
  10. }

○ コンパイルと実行

C:¥work>javac InterfaceTest.java
C:¥work>java InterfaceTest
drip:コーヒー
dripWithMilk:ミルクコーヒー(微糖)

C:¥work>

○ 解説

4行目では、コーヒーオブジェクトを生成しています。そして、7行目と10行目でオーバーライドしたメソッドを呼び出しています。

今回のようにインターフェースを実装したオブジェクトは1つだけ利用してもあまり意味がありません。複数のオブジェクトで実装させることで効果が出てきます。次の節でその効果を確認してみましょう。

前へ   次へ