タグ:

インターフェースによる継承

example (VB.net)

Public Interface I_Test
  Sub method(ByVal val As String)
  Property I_Property() As String
End Interface


Public Class Test1
  Implements I_Test

  Private privateStr As String = "This is Private"
  Public publicStr As String = "This is Public"

  Private InterfaceProperty As String
  Private Property value() As String Implements I_Test.I_Property
    Get
      Return Me.InterfaceProperty
    End Get
    Set(ByVal value As String)
      Me.InterfaceProperty = value
    End Set
  End Property
  Private Sub method(ByVal str As String) Implements I_Test.method
    Console.WriteLine("Hellow " & str)
  End Sub

End Class

Sub Main()
  Dim Obj1 As New Test1()
  Console.WriteLine(Obj1.publicStr)
  '普通のクラスから呼び出すとprivateで保護されているメンバにアクセスするとエラーする
  'Obj1.method("Class")
  'Console.WriteLine(Obj1.InterfaceProperty)

  Dim I_Obj1 As I_Test = New Test1()
  'インターフェースからならprivateメンバにアクセスできる
  I_Obj1.method("InterFace")
  I_Obj1.I_Property = "OK"
  '実装定義されていないメンバはアクセスできない
  'Console.WriteLine(I_Obj1.privateStr)
  'Console.WriteLine(I_Obj1.publicStr)
End Sub

一応、実装とその効果について確認して見ましたが、いまいちメリットが見えてこない。どうもJavaではこんな感じで書くことはできないらしい。また、何か分かったら更新しますww