佐々木屋

技術的なことから趣味まで色々書きます

コンストラクタの継承(引数なし)

クラスの継承をすると基底クラスのフィールドやメソッドは(protected以上であれば)派生クラスからでも自由に利用することができますが、コンストラクタは少し挙動が異なります。

引数が無い場合のコンストラクタは派生クラスが呼ばれた時点で自動的に基底クラスのコンストラクタが呼ばれるようになっています。「コンストラクタは継承しない」と書いてあるWEBサイトもありますが、厳密には引数なしコンストラクタは継承されて暗黙的に実行されます。


基底クラスにコンストラクタが定義されている場合、派生クラスでも基底クラスのコンストラクタが自動的に実行されます。順番的には
 基底クラス → 派生クラス → 派生派生クラス・・・
の順番で実行されます。

public class BaseClass {
    public BaseClass() {
        Console.WriteLine("基底クラス");
    }
}

public class SubClass:BaseClass {
    public SubClass() {
        Console.WriteLine("派生クラス");
    }
}

SubClass test = new SubClass();
Public Class BaseClass
    Public Sub New()
        Console.WriteLine("基底クラス")
    End Sub
End Class

Public Class SubClass
    Inherits BaseClass
    Public Sub New()
        Console.WriteLine("派生クラス")
    End Sub
End Class

Dim test As New SubClass()
基底クラス
派生クラス