ポリモーフィズムを実現させるにはいくつかの方法があります。ここでは、インターフェイスについてみてみましょう。インターフェイスは、抽象メソッドで構成されます。インターフェイスは「interface」キーワードを使って定義します。
インターフェイス定義の書式 |
---|
interface インターフェイス名 { 抽象メソッド定義… } |
インターフェイスはインスタンスを生成できません。別のクラスで実装し、抽象メソッド等をオーバーライドして利用することができるようになります。 実装はクラスの継承と違い、カンマ区切りで複数指定することができます。
インターフェイス実装の書式1 |
---|
class クラス名 implements インターフェイス名, インターフェイス名… { 各種定義… 抽象メソッドのオーバーライド } |
インターフェイス実装の書式2 |
---|
class サブクラス名 extends スーパークラス名 implements インターフェイス名 { 各種定義… 抽象メソッドのオーバーライド } |
○ ファイル
インターフェイスを作成しましょう。今回は飲み物のドリップ方法を指定するインターフェイスを作成します。IDrip.phpファイルを追加してください。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | IDrip.php |
○ プログラム
次のようにプログラムを記述してください。
IDrip.php
○ クラス図
○ 解説
4、5行目で、抽象メソッドを宣言しています。メソッドの仕様は決まっているので、このメソッドを使用するにはオーバーライドして処理を実装する必要があります。
○ ファイル
次に、ドリップインターフェイスを実装したコーヒークラスを作成しましょう。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | Coffee.php |
○ プログラム
次のようにプログラムを記述してください。
Coffee.php
○ クラス図
○ 解説
11~13行目では、IDripインターフェイスのdripメソッドをオーバーライドしています。このメソッドはプロパティに設定されている飲み物を返します。今回はコーヒーが注がれるイメージとして文字列を返しています。
16~18行目では、IDripインターフェイスのdripWithMilkメソッドをオーバーライドしています。このメソッドはミルクとコーヒーを返すことでミルクコーヒーを注ぎます。
○ ファイル
次に、Coffeeクラスを利用するプログラムを作成しましょう。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | InterfaceTest.php |
○ プログラム
次のように記述してください。
InterfaceTest.php
○ 解説
14行目では、珈琲オブジェクトを生成しています。そして、17行目と20行目でオーバーライドしたメソッドを呼び出しています。
○ 実行結果
今回のようにインターフェイスを実装したオブジェクトは1つだけ利用してもあまり意味がありません。複数のオブジェクトで実装させることで効果が出てきます。次の節でその効果を確認してみましょう。