ポリモーフィズムを実現させるにはいくつかの方法があります。ここでは、インターフェイスについてみてみましょう。インターフェイスは、抽象メソッドや抽象プロパティなどで構成されます。インターフェイスは「interface」キーワードを使って定義します。
インターフェイス定義の書式 |
---|
interface クラス名 { 抽象メソッド・抽象プロパティ定義… } |
インターフェイスはインスタンスを生成できません。別のクラスで実装し、抽象メソッド等をオーバーライドして利用することができるようになります。 実装はクラスを継承のように記述しますが、カンマ区切りで複数指定することができます。
インターフェイス実装の書式1 |
---|
class クラス名 : インターフェイス名, インターフェイス名… { 各種定義… 抽象メソッドのオーバーライド } |
インターフェイス実装の書式2 |
---|
class サブクラス名 : スーパークラス名, インターフェイス名… { 各種定義… 抽象メソッドのオーバーライド } |
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 | コンソール アプリケーション |
---|---|
プロジェクト名 | InterfaceTest |
○ インターフェイス作成
ソリューションエクスプローラーより、プロジェクト名を右クリックし、「追加(D)」―「新しい項目(D)...」をクリックします。
「新しい項目の追加」より「テンプレート」で「インターフェイス」を選択します。ファイル名を、作成したいインターフェイス名とします。今回は、「IDrip」という名前のインターフェイスを作成します。ファイル名を入力し、「追加」ボタンをクリックします。
すると、インターフェイスが作成されます。
○ プログラム
インターフェイスを作成しましょう。今回はドリップを表すインターフェイスを作成します。このインターフェイスは、主に飲み物に実装させる予定です。実装したクラスでは飲み物の注ぎ方を定義させます。
IDrip.cs
○ クラス図
○ 解説
11~12行目で、抽象メソッドを宣言しています。メソッドの仕様は決まっているので、このメソッドを使用するにはオーバーライドして処理を実装する必要があります。
○ プログラム
次に、ドリップインターフェイスを実装したコーヒークラスを作成しましょう。
Coffee.cs
○ クラス図
○ 解説
16~19行目では、IDripインターフェイスのDripメソッドをオーバーライドしています。このメソッドはフィールドに設定されている飲み物を返します。今回はコーヒーが注がれるイメージとして文字列を返しています。
21~25行目では、IDripインターフェイスのDripWithMilkメソッドをオーバーライドしています。このメソッドはミルクとコーヒーを返すことでミルクコーヒーを注ぎます。
○ プログラム
では次にCoffeeクラスを利用するプログラムを作成しましょう。次のように記述してください。
Program.cs
○ 解説
14行目では、珈琲オブジェクトを生成しています。そして、17行目と20行目でオーバーライドしたメソッドを呼び出しています。
○ 実行結果
Drip:コーヒー
DripWithMilk:ミルクコーヒー(微糖)
今回のようにインターフェイスを実装したオブジェクトは1つだけ利用してもあまり意味がありません。複数のオブジェクトで実装させることで効果が出てきます。次の節でその効果を確認してみましょう。