書籍転載
文法からはじめるプログラミング言語Microsoft Visual Basic入門

VB開発者のためのインターフェイス入門
― 第8章 ポリモーフィズム〜クラスの操作方法(後編) ―

WINGSプロジェクト 高江 賢(監修 山田 祥寛)
2010/10/06
Page1 Page2

8.2.3 インターフェイスの多重継承、多重実装

 インターフェイスには、クラスの継承にはない特徴的な機能がいくつかあります。

 1つは、インターフェイス自体が、インターフェイスを継承できることです。ただ、継承と言っても、実装するわけではありませんから、基本となるインターフェイスをそのまま引き継ぐだけで、宣言も不要です。

 また、引き継ぐインターフェイスは、1つだけでなく複数指定ができます。ここが、抽象クラスと異なる点です。抽象クラスは、単一継承なので、基本クラスは1つしか指定できません。

 構文は、以下のようになります。

Interface インターフェイス名
  Inherits 基本インターフェイス
  ' 抽象メンバの宣言
End Interface

または

Interface インターフェイス名 : Inherits 基本インターフェイス
  ' 抽象メンバの宣言
End Interface
[構文]インターフェイスの継承

 複数のインターフェイスを継承する場合は、派生したインターフェイスの宣言で、基本となるインターフェイスをInheritsステートメントでそれぞれ指定します。あるいは、コンマで区切っても宣言できます。たとえば、2つのインターフェイスを継承する場合は次のようになります。

Interface ISampleInterface
  Inherits Interface1
  Inherits Interface2
End Interface

Interface ISampleInterface
  Inherits Interface1, Interface2
End Interface

’マルチステートメントでは
Interface ISampleInterface : Inherits Interface1, Interface2
End Interface

 では次に、実際のサンプルコードを示します。

' 基本インターフェイス1
Interface Interface1
  Sub method1(ByVal a As Integer)
End Interface

' 基本インターフェイス2
Interface Interface2
  Sub method2(ByVal s As String)
End Interface

' 派生インターフェイス
Interface ISampleInterface
  Inherits Interface1
  Inherits Interface2

  Sub method3()

End Interface

' 派生インターフェイスの実装
Class Sample
  Implements ISampleInterface

  Public Sub method1(ByVal a As Integer)_
                  Implements ISampleInterface.method1
    Console.WriteLine(a)
  End Sub

  Public Sub method2(ByVal s As String)_
                  Implements ISampleInterface.method2
    Console.WriteLine(s)
  End Sub

  Public Sub method3() Implements ISampleInterface.method3
    Console.WriteLine("method3")
  End Sub

End Class

Class MainClass
  Public Shared Sub Main()

    Dim s As New Sample()

    s.method1(123)    ' 出力値:123
    s.method2("test")   ' 出力値:test
    s.method3()     ' 出力値:method3

  End Sub
End Class
[サンプル]interface3.vb

 サンプルコードのISampleInterfaceは、基本となるインターフェイスをそのまま含んでいます。そのため、その実装クラスであるSampleクラスでは、Interface1、Interface2で宣言したメソッドを含め、すべてのインターフェイスの実装が必要です。

 次にインターフェイスの特徴の2つ目です。それは、1つのクラスで、複数のインターフェイスを実装できることです。継承では1つのクラスしか指定できませんでした。複数のインターフェイスを実装するには、クラスの宣言で、以下のようにコンマで区切ってインターフェイスを指定します。

' インターフェイス1
Interface Interface1
  Sub method1(ByVal a As Integer)
End Interface

' インターフェイス2
Interface Interface2
  Sub method2(ByVal s As String)
End Interface

Class SampleClass : Implements Interface1, Interface2
  Public Sub method1(ByVal a As Integer) Implements Interface1.method1
    Console.WriteLine(a)
  End Sub

  Public Sub method2(ByVal s As String) Implements Interface2.method2
    Console.WriteLine(s)
  End Sub
End Class
[サンプル]interface4.vb

 あるいは、次のように、Implementsキーワードを各インターフェイスごとに指定することもできます。

Class SampleClass
  Implements Interface1
  Implements Interface2
End Class

 通常のクラスの継承とインターフェイスの実装を合わせて記述することもできます。ただし、次のように、Inheritsステートメントを必ずインターフェイスよりも先に記述しなければなりません。

Class SampleClass
  Inherits BaseClass
  Implements Interface1, Interface2
End Class

 マルチステートメントによる書き方では、次のようになります。

Class SampleClass : Inherits BaseClass
  Implements Interface1, Interface2
End Class

Class SampleClass : Inherits BaseClass : Implements Interface1, Interface2
End Class

【コラム】抽象クラスとインターフェイスのイメージ

 抽象クラスとインターフェイスは、その違いがイメージできないと、なかなか使いどころがわからないものです。ここで、そのイメージを整理してみましょう。

 抽象クラスを継承する場合、実装は派生クラスで定義するといっても、両者のクラスには「乗り物」-「自動車」といったis-a関係となるようにすべきです。親子関係のような、縦のつながりを無視することはできないのです。一方、インターフェイスは、そのような関係には束縛されません。インターフェイスを実装するということは、インターフェイスで宣言されているメソッドが、そのクラスで使えるということを示しているにすぎません。言ってみれば、インターフェイスの実装は、横のつながりということになるでしょう。関係のないクラスでも、インターフェイスによって共通性を持たせることができるのです。

 次回は「第11章 高度なプログラミング〜プログラミングの世界を広げる」の「11.4 演算子のオーバーロード(Visual Basic 2005)」を転載します。End of Article

 

 INDEX
  [書籍転載]文法からはじめるプログラミング言語Microsoft Visual Basic入門
  VB開発者のためのインターフェイス入門
    1.インターフェイスとは/データ型としてのインターフェイス
  2.インターフェイスの多重継承、多重実装

インデックス・ページヘ 「文法からはじめるプログラミング言語Microsoft Visual Basic入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間