4-1: クラスの継承の意味


・ 「クラスの継承(inheritance)」 はクラスやオブジェクトに次いで重要な概念と言えるでしょう。 ほとんどのオブジェクト指向言語はクラスの継承の考え方を導入しています。 もちろん Javaも例外ではありません。 クラスの継承とはどのようなものなのか? そしてオブジェクト指向の中で どんな働きをするのか解説していくことにしましょう。 もっとも、あまり難しく考え込む必要はありません。 この後で述べるようにクラスの継承のアイディア自体は、 きわめて自然で合理的なものだからです。
クラスはその内部にオブジェクトを構成する要素持っています。 Javaの場合ならば、クラス定義内に記述されるメンバー、 フィールドとそれらを操作するためのメソッドおよびコンストラクタ、 innerクラスです。 これらをクラスが所有する「財産」のようなものと考えてみましょう。 人間の場合には子供が親から財産を相続します。 それと同じように、新しいクラスを設計する時に 既存のクラスが持っている情報をそっくり受け継ごうというアイディア、 これがクラスの継承です。 複雑なクラスを記述する場合、まったくゼロの状態から始めるのは大変です。 これに対してクラスの継承を利用すれば、 既に存在する情報に新しい情報をつけ加えるだけで済みます。 この過程は親から子へ、子から孫へと繰り返し行うことも可能です。 ちょうど何代にも渡って少しずつ財産を築いていくことができるわけです。


継承によって内容を少しずつ豊富にしていくことができる

あるいはもう一つの比喩として 「生物の進化」のようなものとイメージしていただいてもいいでしょう。 単純で基本的なクラスから複雑で多様な機能を持つクラスへと、 少しずつ進化させていくわけです。 実際、クラスの継承関係を表現するために、 しばしば生物の進化の「系統樹」のような図が利用されます。


クラスの継承関係の表現

・ クラスの継承に関連して、 これからしばしば登場することになる重要な用語も確認しておきましょう。 まずクラスの親子の関係に関してです。 あるクラスを元にして、それを継承した新しいクラスを作る場合、 元になる親の方のクラスを「スーパークラス(super class)」と呼びます。 これに対して新しく定義される子のクラスの方を 「サブクラス(sub class)」と呼びます。 またスーパークラス、サブクラスという呼び方は、 直接の親や子に対応するクラスのみに用いられわけではありません。 先祖に当たるクラスはすべてスーパークラス、 子孫として生み出されたクラスはすべてサブクラスと呼ぶのが普通です。 クラスの継承の場合は、親の財産はそっくり全て子供に伝えられます。 したがって一般にサブクラスの方がスーパークラスよりも豊富な機能を備えています。 つまり子供の方が親よりも大きいわけです。 この点は勘違いしやすいので注意してください。


サブクラスはスーパークラスより大きい