継承を行うと基本クラスの機能をそのまま派生クラスで利用することが出来ます。メソッドもプロパティもフィールドも全て継承されます。しかし、継承できない部分もあります。それがコンストラクタです。

 コンストラクタはそれを宣言したクラスでしか有効ではありません。複数のコンストラクタを持つクラスを継承した場合、その派生クラスのコンストラクタは何もありません。そのため、基本クラスとまったく同じコンストラクタを用意するには、コンストラクタを基本クラスと同じように宣言してやる必要があります。しかし、コンストラクタを一つも宣言していない場合には、引数をなにも取らないコンストラクタをコンパイラが自動生成します。次にその例を簡単に紹介します。

基本クラス
Public Class FoxBase

    Public Sub New() 
    End Sub

    Public Sub New(ByVal name As String) 
    End Sub

    Public Sub New(ByVal name As String, ByVal age As String) 
    End Sub

End Class
派生クラス
Public Class Fox
    Inherits FoxBase
End Class

 派生クラスの Fox は次のようにして生成することが出来ます。

派生クラスを生成する例
Dim f As New Fox() ' コンパイラが自動生成したコンストラクタを呼び出している

 派生クラスの Fox は次のようにして生成することは出来ません。

派生クラスを生成できない例
Dim f As New Fox("名前") ' String を引数にとるコンストラクタはありません
Dim f As New Fox("名前", "年") ' String, String を引数にとるコンストラクタはありません

 派生クラスでも基本クラスと同じように生成するためには、次のようにコンストラクタを明示的に宣言してやる必要があります。

基本クラスと同じコンストラクタを持った派生クラス
Public Class Fox
    Inherits FoxBase

    Public Sub New() 
        MyBase.New()
    End Sub

    Public Sub New(ByVal name As String) 
        MyBase.New(name)
    End Sub

    Public Sub New(ByVal name As String, ByVal age As String) 
        MyBase.New(name, age)
    End Sub

End Class