クラスの継承①

概要

クラスは単一の継承元クラスを指定することができます。
それにより、継承元クラスの持つ機能・情報を共用、更には拡張することができます。
抽象的な情報を持つクラスを継承元とし、継承先でより具体的な情報を持たせるといった形で使用します。

継承の宣言

クラス定義の後に「: {継承元クラス名}」を指定することで継承を宣言できます。

public class HogeBase
{ }

public class Hoge : HogeBase
{ }

コンストラクター

継承先クラスのインスタンスを生成する際、継承元クラス→継承先クラスの順でコンストラクターが呼び出されます。
継承元クラスに明示的にコンストラクター実装されていない場合、自動生成の引数なしコンストラクターが自動的に呼び出されます。
引数ありコンストラクターのみが明示的に実装されている場合、baseキーワードを使用して該当コンストラクターを明示的に呼び出す必要があります。

public class HogeBase
{
    public HogeBase(object obj)
    { }
}

public class Hoge : HogeBase
{
    // HogeBaseのコンストラクターを明示的に呼び出し
    public Hoge() : base(new object())
    { }
}

継承元機能の利用

継承先クラス型のインスタンスから継承元クラスの機能を呼び出すことができます。
また、継承先クラス内で継承元クラスの機能を利用できます。

以下のようなクラス構成の場合、HogeインスタンスからFuga()を呼び出すことができ、
また、内部でMoge()も呼び出すことができます。

public class HogeBase
{
    public void Fuga()
    { }

    protected void Moge()
    { }
}

public class Hoge : HogeBase
{
    public void Piyo()
    { 
        Moge();
    }
}
var hoge = new Hoge();
hoge.Fuga();
hoge.Piyo();