インターフェイス

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

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

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

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

インターフェイス実装の書式2
Class サブクラス名 Inherits スーパークラス名 Implements インターフェイス名
 各種定義…
 抽象メソッドのオーバーライド
End Class

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 InterfaceTest

サンプルダウンロード

○ インターフェイス作成

 ソリューションエクスプローラーより、プロジェクト名を右クリックし、「追加(D)」―「新しい項目(D)...」をクリックします。

新しい項目を追加する
新しい項目を追加する

 「新しい項目の追加」より「テンプレート」で「インターフェイス」を選択します。ファイル名を、作成したいインターフェイス名とします。今回は、「IDrip」という名前のインターフェイスを作成します。ファイル名を入力し、「追加」ボタンをクリックします。

インターフェイス作成の設定
インターフェイス作成の設定

 すると、インターフェイスが作成されます。

インターフェイスのスケルトン
インターフェイスのスケルトン

○ プログラム

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

IDrip.vb

  1. Public Interface IDrip
  2.  Function Drip() As String
  3.  Function DripWithMilk() As String
  4. End Interface

○ クラス図

○ 解説

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

○ プログラム

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

Coffee.vb

  1. Public Class Coffee
  2.  Implements IDrip
  3.  'フィールド
  4.  Private name As String = "コーヒー"
  5.  '注ぐメソッドをオーバーライド
  6.  Public Function Drip() As String Implements IDrip.Drip
  7.   Return Me.name
  8.  End Function
  9.  'ミルクと一緒に注ぐメソッドをオーバーライド
  10.  Public Function DripWithMilk() As String Implements IDrip.DripWithMilk
  11.   Return "ミルク" & Me.name & "(微糖)"
  12.  End Function
  13. End Class

○ クラス図

○ 解説

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

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

○ プログラム

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

Module1.vb

  1. Sub Main()
  2.  'コーヒーオブジェクトを生成
  3.  Dim coffeeobj As New Coffee()
  4.  'コーヒーを注いでみる
  5.  Console.WriteLine("Drip:{0}", coffeeobj.Drip())
  6.  'ミルクを一緒に注いでみる
  7.  Console.WriteLine("DripWithMilk:{0}", coffeeobj.DripWithMilk())
  8.  Console.ReadLine()
  9. End Sub

○ 解説

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

Drip:コーヒー
DripWithMilk:ミルクコーヒー(微糖)

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

前へ   次へ