VB.NETのポリモーフィズムを完全ガイド!初心者でもわかる多態性とオブジェクト指向
生徒
「VB.NETのオブジェクト指向でポリモーフィズムという言葉を見たんですが、どんな意味なんですか?」
先生
「ポリモーフィズムは、同じメソッド名でも、クラスごとに違う動きをさせられる機能のことです。」
生徒
「同じ名前なのに違う動きになるんですか? 少し不思議ですね。」
先生
「とても便利な仕組みなので、例えをまじえながら基本から説明していきましょう!」
1. ポリモーフィズムとは?
VB.NETのポリモーフィズム(多態性)とは、同じメソッド名であっても、クラスごとに異なる処理を実行できるオブジェクト指向の重要な仕組みです。これは「同じ行動を指示されても、人によってやり方が違う」というような、現実世界にも似た考え方です。
例えば、先生が「挨拶をしてください」と言ったとします。日本人なら「こんにちは」、英語圏の人なら「Hello」、フランス人なら「Bonjour」と言います。同じ“挨拶する”という指示でも、結果は人によって変わります。 これがプログラミングにおけるポリモーフィズムのイメージです。
VB.NETでポリモーフィズムを理解すると、プログラムの拡張性が高くなり、複数の種類のオブジェクトを一つの方法で扱えるようになります。初心者がつまずきやすい部分でもありますが、ゆっくり理解していけば必ず使いこなせます。
2. 基本は「継承」と「オーバーライド」
VB.NETのポリモーフィズムを実現するためには、継承(Inherits)とオーバーライド(Overrides)の2つを使います。
- 継承:親クラスの機能を子クラスが受け継ぐ仕組みのこと。
- オーバーライド:親クラスで作ったメソッドを、子クラスが独自の処理に書き換えること。
親クラスに「挨拶をする」というメソッドを用意し、子クラスでその内容をそれぞれの言語に合わせて書き換える、といった感じです。
3. VB.NETでのポリモーフィズムの基本コード
まずは、親クラスと子クラスを作って、オーバーライドする例を紹介します。
Public Class Person
Public Overridable Sub Greet()
Console.WriteLine("こんにちは")
End Sub
End Class
Public Class Japanese
Inherits Person
Public Overrides Sub Greet()
Console.WriteLine("こんにちは(日本)")
End Sub
End Class
Public Class American
Inherits Person
Public Overrides Sub Greet()
Console.WriteLine("Hello(アメリカ)")
End Sub
End Class
Overridable は「このメソッドは書き換えてOKですよ」という意味、Overrides は「書き換えましたよ」という意味になります。
4. ポリモーフィズムを使った実行結果
次のコードは、複数の人をまとめて同じGreet()メソッドで挨拶させています。
Dim people As List(Of Person) = New List(Of Person) From {
New Japanese(),
New American()
}
For Each p In people
p.Greet()
Next
こんにちは(日本)
Hello(アメリカ)
同じGreet()というメソッドを呼んでいるのに、実際にはそれぞれ違う挨拶が表示されていることがわかります。これこそがVB.NETのポリモーフィズムの魅力です。
5. 日常生活でたとえるポリモーフィズム
初心者にとってプログラミングの概念を理解しづらい理由は、現実と結びつかないことが多いためです。そこで、さらに身近な例を出してみましょう。
例えば「料理を作る」という行動があります。料理人ごとに作り方は違いますよね。
- フランス料理のシェフ → 丁寧なソース作り
- イタリア料理のシェフ → パスタを手際よく茹でる
- 和食の料理人 → だしの取り方が違う
動作自体は「料理を作る」ですが、実際の内容は全く異なります。これがプログラミングでの「同じメソッド名でも違う処理になる」ポリモーフィズムと同じ考え方になります。
VB.NETでは、こうした柔軟な動作をプログラム内で再現し、さまざまな種類のデータやオブジェクトを統一的に扱えるようにします。
6. VB.NETでポリモーフィズムを使うメリット
ポリモーフィズムはVB.NETのクラス設計を綺麗にするための重要な仕組みです。メリットをいくつか紹介します。
- 複数のクラスを同じ操作でまとめて扱える
- プログラムの変更点が少なくなる
- 拡張しやすく、新しいクラスを追加するだけで機能が増える
- VB.NETのオブジェクト指向の理解が深まり、複雑なプログラムにも対応できる
例えば、新しい国のクラスを増やしたい場合でも、Personを継承し、Greet()をオーバーライドするだけで簡単に追加できます。既存のコードをほとんど変えずに拡張できるのは、大きなメリットです。