コンストラクタの継承(引数なし)
クラスの継承をすると基底クラスのフィールドやメソッドは(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()
基底クラス 派生クラス