第37章 クラスの継承の基礎


クラスを利用する最大の理由の一つに「クラスは継承することができる」ということがあげられます。もし、クラスの継承ができなければGUIのWindowsプログラムの作成は大変面倒なものになります(後の章で自ずとわかります)。



クラスの継承(inheritance)は、オブジェクト指向プログラミング(OOP,Object Oriented Programming)の3本柱の1つといわれています。

有るクラスを、他のクラスに継承するプログラムは(内容を考えなければ)簡単です。 クラス宣言の時に、継承したいクラスをコロン(:)でつなぎます。

class クラス名 : 継承元クラス名 {...}
継承元のクラスを「基本クラス」、継承先のクラスを「派生クラス」といいます。

派生クラスは、一つの基本クラスからしか継承できません。C/C++とは、この点で異なります。

派生クラスでは、基本クラスのメンバのうちpublicなものと、protectedなものにアクセスできます。privateなメンバにはアクセスできません。

では、簡単なサンプルを見てみましょう。

// inheritance01.cs

using System;

class MyClass
{
    protected int x;

    public void show()
    {
        Console.WriteLine("x = {0}", x);
    }

    public int setx
    {
        set
        {
            x = value;
        }
    }
}

class MyChild : MyClass
{
    int y;

    public void show2()
    {
        Console.WriteLine("x = {0}, y = {1}", x, y);
    }

    public int sety
    {
        set
        {
            y = value;
        }
    }
}

class inheritance01
{
    public static void Main()
    {
        MyChild mc = new MyChild();

        mc.setx = 10;
        mc.sety = 20;
        mc.show();
        mc.show2();

        Console.Write("\n");

        MyClass myclass = new MyClass();
        myclass.setx = 100;
        myclass.show();
    }
}
MyChildクラスは、MyClassクラスから派生した派生クラスです。

MyClassクラスには、protectedなxインスタンスフィールドがあります。

また、publicなshowメソッドがあり、xの値を表示します。

setxというpublicなプロパティもあります。

一方、MyChildクラスには、privateなインスタンスフィールドyと、publicな show2メソッドがあります。このメソッドの中で、MyClassクラスのメンバのxに アクセスしています。xはprotectedなので、継承先でも見えるのですね。

さて、MyClassクラスのsetyプロパティは、protectedではなく、publicにしてあります。 これは、MyClidクラスからは見えても、それ以外からは見えないため、使いようが無いのでpublicにしてあります。protectedなメンバは、継承先でもprotectedであり、publicなメンバは継承先でもpublicとなります。

Mainメソッドでは、まずMyChildクラスのインスタンスを生成しています。

MyChildクラスには、setxプロパティを宣言していませんがmc.setx = 10;のように、 基本クラスのプロパティを使っています。また、showメソッドも定義していませんが mc.show();のように使っています。

次に基本クラスのMyClassのインスタンスを生成しています。基本クラスも今まで通り 普通に使えます。しかし、当然ながら継承先のことはわからないので、myclass.show2(); などとはできません。

では、実行結果を見てみましょう。




[C# Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 12/Sep/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。