カテゴリ: 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
VB.NET
VB.NETの例外処理でよくあるアンチパターンと注意点を初心者向けに徹底解説
New2
ASP.NET
ASP.NET WebFormsのGridViewでデータ表示を完全マスター!初心者向けガイド
New3
VB.NET
VB.NETの例外処理とパフォーマンスの関係を初心者向けに完全解説
New4
ASP.NET
ASP.NET WebFormsでデータベースと連携!初心者でもできる保存と表示の基本
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETのEnum(列挙型)の使い方を完全解説!初心者にも分かる定義と活用方法
No.2
Java&Spring記事人気No2
VB.NET
VB.NETのBoolean型(True/False)の使い方と条件分岐での活用方法を徹底解説!初心者でも理解できる基本
No.3
Java&Spring記事人気No3
VB.NET
VB.NETの配列(Array)の作り方と基本操作を徹底解説!初心者でもわかる入門ガイド
No.4
Java&Spring記事人気No4
VB.NET
VB.NETのIf文の使い方と条件分岐を完全ガイド!初心者でもわかる基本構文と実例
No.5
Java&Spring記事人気No5
VB.NET
VB.NETの例外処理を完全ガイド!初心者でもわかるSystem.Exceptionの仕組み
No.6
Java&Spring記事人気No6
VB.NET
VB.NETプログラムの実行方法まとめ!Visual Studio・コマンドラインの使い方
No.7
Java&Spring記事人気No7
VB.NET
VB.NETのコンストラクタと初期化処理の書き方を初心者向けに解説
No.8
Java&Spring記事人気No8
VB.NET
VB.NETでの変数名の付け方とは?わかりやすくエラーの起きにくい命名規則を紹介