カテゴリ: VB.NET 更新日: 2025/12/17

VB.NETのオーバーライドと隠蔽を完全ガイド!初心者でも理解できるクラスとオブジェクト指向の基礎

VB.NETのオーバーライド(Overrides)と隠蔽(New)の違い
VB.NETのオーバーライド(Overrides)と隠蔽(New)の違い

先生と生徒の会話形式で理解しよう

生徒

「VB.NETのクラスでOverridesとかNewって見たけど、どう使うのかわかりません…。」

先生

「それはオブジェクト指向の仕組みを理解するうえでとても大事なポイントだよ。親クラスと子クラスの関係を考えるとイメージしやすいんだ。」

生徒

「親クラスと子クラス…?難しそうです…。」

先生

「身近な例を使って説明するから安心して。まずは基本から順番に見ていこう。」

1. VB.NETのオーバーライドと隠蔽とは?

1. VB.NETのオーバーライドと隠蔽とは?
1. VB.NETのオーバーライドと隠蔽とは?

VB.NETのオブジェクト指向では、親クラス(基本クラス)を元にして子クラス(派生クラス)が作られます。そのとき、親クラスにあるメソッドを子クラスで『作り変える』か『別のものとして作り直す』かという選択肢があります。この違いを理解するために知っておくべきキーワードがOverrides(オーバーライド)New(隠蔽・シャドウイング)です。

オーバーライドは「親の機能を引き継いで上書きする」というイメージです。一方、隠蔽は「親とは関係を切って別物として作り直す」という考え方です。これらの使い分けを理解すると、VB.NETのクラス設計がぐっと分かりやすくなります。

2. Overrides(オーバーライド)とは?

2. Overrides(オーバーライド)とは?
2. Overrides(オーバーライド)とは?

オーバーライドとは、親クラスに用意されているメソッドを子クラス側で上書きして、より適した形に書き換える手法です。例えば、親クラスが「動物」という名前で、その中に「鳴く」というメソッドがあるとします。犬という子クラスを作ったとき、「犬はワンと鳴く」ように書き換えたいですよね。これがまさにオーバーライドです。

オーバーライドを使うためには、親クラスでメソッドにOverridableキーワードを付け、子クラス側でOverridesを使って書き換えます。


Public Class Animal
    Public Overridable Sub Cry()
        Console.WriteLine("動物が鳴きます")
    End Sub
End Class

Public Class Dog
    Inherits Animal
    Public Overrides Sub Cry()
        Console.WriteLine("ワンワン!")
    End Sub
End Class

このように子クラスが同じ名前のメソッドを「上書き」することで、同じ動作でもクラスごとに適した動きを実現できます。

3. New(隠蔽)とは?

3. New(隠蔽)とは?
3. New(隠蔽)とは?

隠蔽(シャドウイングとも呼びます)は、親クラスのメソッドとは切り離して、同じ名前だけどまったく別物のメソッドとして扱うやり方です。オーバーライドとは違い、親の機能を引き継ぐ形ではありません。

例えるなら「親のやり方は無視して、子どもは独自のやり方で行う」といったイメージです。子クラスではNewキーワードで定義します。


Public Class Animal
    Public Sub Cry()
        Console.WriteLine("動物が鳴きます")
    End Sub
End Class

Public Class Cat
    Inherits Animal
    Public New Sub Cry()
        Console.WriteLine("ニャー!")
    End Sub
End Class

この場合、子クラスのメソッドは親のメソッドとは独立しているため、参照の仕方によって呼ばれるメソッドが変わるという特徴があります。 例えば、親型の変数に子クラスのインスタンスを入れると、親のメソッドが呼ばれます。これは初心者が混乱しやすいポイントですが、隠蔽はあくまで「別のメソッド」として扱われることを覚えておくと理解しやすいです。

4. Overrides と New の違いをやさしく比較

4. Overrides と New の違いをやさしく比較
4. Overrides と New の違いをやさしく比較

オーバーライドは親と子が強くつながった関係で、隠蔽は親とは別として扱う関係です。たとえば、家族の中で「ルールをより良く改良する」のがオーバーライドで、「ルールを無視して自分のルールを作る」のが隠蔽と考えると理解しやすいでしょう。

VB.NETでは、この二つを間違えて使うと意図しない動作が起こることがあります。とくに隠蔽の場合、親型の変数でアクセスすると親のメソッドが呼ばれてしまうため、プログラム全体の流れを読みにくくなることがあります。

そのため、基本的には「親クラスの機能を継承して意味のある修正をしたいならOverrides」「まったく別の実装にしたいときはNew」という形で使い分けるのが一般的です。

5. OverridesとNewを実際に比較して動作を確認する

5. OverridesとNewを実際に比較して動作を確認する
5. OverridesとNewを実際に比較して動作を確認する

それでは、両方を並べて動作の違いを確認してみましょう。


Public Class Animal
    Public Overridable Sub Cry()
        Console.WriteLine("動物が鳴きます")
    End Sub
End Class

Public Class Dog
    Inherits Animal
    Public Overrides Sub Cry()
        Console.WriteLine("ワンワン!")
    End Sub
End Class

Public Class Cat
    Inherits Animal
    Public New Sub Cry()
        Console.WriteLine("ニャー!")
    End Sub
End Class

Module Program
    Sub Main()
        Dim a1 As Animal = New Dog()
        Dim a2 As Animal = New Cat()

        a1.Cry() 'オーバーライドの結果
        a2.Cry() '隠蔽の結果
    End Sub
End Module

実行結果:


ワンワン!
動物が鳴きます

このように、オーバーライドしたDogでは親型変数でも子クラスのメソッドが呼ばれています。一方、Catは隠蔽なので親型変数で呼び出すと親のメソッドが実行されます。

関連記事:
カテゴリの一覧へ
新着記事
New1
ASP.NET
ASP.NET Web APIとMVCの違いを完全解説!初心者でもわかるWebアプリとAPIの基本
New2
ASP.NET
ASP.NET開発環境構築|コマンドライン(dotnet CLI)でASP.NETプロジェクトを作成する方法
New3
VB.NET
VB.NETで文字列を綺麗に整える!String.Formatと文字列補間の使い方
New4
ASP.NET
LinuxでASP.NET Coreを動かす手順|初心者でもわかる開発環境構築ガイド
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETのJoinメソッドを徹底解説!バラバラの文字列を一つに結合する方法
No.2
Java&Spring記事人気No2
VB.NET
VB.NETの文字列置換を完全解説!初心者でもわかるReplaceメソッドの使い方
No.3
Java&Spring記事人気No3
VB.NET
VB.NETの配列(Array)の作り方と基本操作を徹底解説!初心者でもわかる入門ガイド
No.4
Java&Spring記事人気No4
VB.NET
VB.NETで文字列結合を高速化!StringBuilderクラスの使い方を完全ガイド
No.5
Java&Spring記事人気No5
VB.NET
VB.NETのList(Of T)の使い方を完全ガイド!初心者が最初に覚えるべきリスト操作
No.6
Java&Spring記事人気No6
VB.NET
VB.NETのDictionaryを完全ガイド!初心者でもわかる辞書の基本と応用
No.7
Java&Spring記事人気No7
VB.NET
VB.NETでStaticメソッドを定義する方法と活用例
No.8
Java&Spring記事人気No8
VB.NET
VB.NETのTrimで空白削除!初心者向け文字列整形完全ガイド