無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

VB.NETをつつく17−多態性。曖昧なものを具体化。

この記事で最後のオブジェクト指向プログラミングの機能多態性(ポリモーフィズム) に関する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メソッドでも実行結果が違うピヨ。 これが多態性(ポリモーフィズム)なんだ。
突然だけど、長すぎると読みにくいので次回へ続く。
別窓 | VB.NET | コメント:0 | トラックバック:0 | ∧top | under∨
<<C++/CLIをつつく17−多態性。曖昧なものを具体化。 | 無差別に技術をついばむ鳥 | C#をつつく17−多態性。曖昧なものを具体化。>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |