この記事で最後のオブジェクト指向プログラミングの機能
多態性(ポリモーフィズム)
に関するVB.NETの機能を扱ってみよう。
名前は難しいけど、大したことしていないからみんなリラックスして読んでね。
さて、今回までにAnimal抽象クラスを元に、BirdクラスとHumanクラスを作ったけど、
個性が無いとつまらないよね?
それに、
そもそも同じ機能ならば作る意味が無いピヨね。
ということでAnimal抽象クラスに一つメソッドを追加するピヨ。
ではさっそくコードだぁー。
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メソッドでも実行結果が違うピヨ。
これが
多態性(ポリモーフィズム)なんだ。
突然だけど、長すぎると読みにくいので次回へ続く。