インターフェイス

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

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

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

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

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

○ ファイル

 インターフェイスを作成しましょう。今回は飲み物のドリップ方法を指定するインターフェイスを作成します。IDrip.phpファイルを追加してください。

ファイルの種類 PHPファイル
ファイル名 IDrip.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

IDrip.php

  1. <?php
  2. interface IDrip
  3. {
  4.  public function drip();
  5.  public function dripWithMilk();
  6. }

○ クラス図

○ 解説

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

○ ファイル

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

ファイルの種類 PHPファイル
ファイル名 Coffee.php

○ プログラム

 次のようにプログラムを記述してください。

Coffee.php

  1. <?php
  2. //インターフェイスファイルを読み込む
  3. require_once 'IDrip.php';
  4. class Coffee implements IDrip
  5. {
  6.  //プロパティ
  7.  private $name = 'コーヒー';
  8.  //注ぐメソッドをオーバーライド
  9.  public function drip(){
  10.   return $this -> name;
  11.  }
  12.  //ミルクと一緒にそそぐメソッドをオーバーライド
  13.  public function dripWithMilk(){
  14.   return 'ミルク' . $this -> name . '(微糖)';
  15.  }
  16. }

○ クラス図

○ 解説

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

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

○ ファイル

 次に、Coffeeクラスを利用するプログラムを作成しましょう。

ファイルの種類 PHPファイル
ファイル名 InterfaceTest.php

○ プログラム

 次のように記述してください。

InterfaceTest.php

  1. <?php
  2. //クラスファイルを読み込む
  3. require_once 'Coffee.php';
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="ja">
  7.  <meta charset="utf-8">
  8.  <head>
  9.   <title>Coffeeオブジェクト実行</title>
  10.   </head>
  11.  <body>
  12. <?php
  13. //珈琲オブジェクトを生成
  14. $coffee = new Coffee();
  15. //珈琲を注いでみる
  16. print('Drip:' . $coffee -> drip() . '<br>');
  17. //ミルクも一緒に注いでみる
  18. print('DripWithMilk:' . $coffee -> dripWithMilk() . '<br>');
  19. ?>
  20.  </body>
  21. </html>

○ 解説

 14行目では、珈琲オブジェクトを生成しています。そして、17行目と20行目でオーバーライドしたメソッドを呼び出しています。

○ 実行結果

実行結果
実行結果

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

前へ   次へ