VB.NETをつつく17-多態性。曖昧なものを具体化。
Public MustInherit Class Animal
Private m_name As String
Public Property Name() As String
Get
Return m_name
End Get
Set(ByVal value As String)
Me.m_name = value
End Set
End Property
Private m_age As Integer
Public Property Age() As Integer
Get
Return Me.m_age
End Get
Set(ByVal value As Integer)
If value > 0 Then
Me.m_age = value
End If
End Set
End Property
Public Sub New(ByVal name As String, ByVal age As Integer)
Me.Name = name
Me.Age = age
End Sub
Public Sub Talk()
Console.WriteLine("ワタシハ{0}。年は{1}だよ。", _
Me.Name, Me.Age)
End Sub
'ここに機能を追加
Public MustOverride Sub Move()
End Class
さっそくこのコードをコンパイルしてね。 コンパイルしたら・・・
クラス 'Bird' は、'MustInherit' として宣言するか、または以下の継承 'MustOverride' メンバをオーバーライドしなければなりません:
クラス 'Human' は、'MustInherit' として宣言するか、または以下の継承 'MustOverride' メンバをオーバーライドしなければなりません:
とVB.NETコンパイラに怒られるピヨ。でも、これでいいんだ。 こうすることによって、新しいDogクラスとかを作る際にMoveメソッドの実装を忘れないで済むんだ。
VB.NETコンパイラに怒られたからMoveメソッドを実装してみよう。
Public Class Bird
Inherits Animal
Public Sub New(ByVal name As String, ByVal age As Integer)
MyBase.New(name, age)
End Sub
Public Overrides Sub Move()
Console.WriteLine("バサバサバサバサ")
End Sub
End Class
Public Class Human
Inherits Animal
Public Sub New(ByVal name As String, ByVal age As Integer)
MyBase.New(name, age)
End Sub
Public Overrides Sub Move()
Console.WriteLine("テクテクテクテク")
End Sub
End Class
Public Class Module1
Public Shared Sub Main()
Dim tori As Bird = New Bird("インドリ", 29)
tori.Move()
Console.WriteLine("{0}参上!", tori.Name)
tori.Talk()
Console.WriteLine()
Dim dre As Human = New Human("ドリィちゃん", 16)
dre.Move()
Console.WriteLine("{0}参上!", dre.Name)
dre.Talk()
Console.WriteLine()
End Sub
End Class
このコードを実行してごらん。同じ同じMoveメソッドでも実行結果が違うピヨ。
これが多態性(ポリモーフィズム)なんだ。突然だけど、長すぎると読みにくいので次回へ続く。