![]() ![]() ![]() ![]() |
オブジェクト指向のプログラミング概念(入門書) |
一般的に、オブジェクトはクラスによって定義される。 クラスを知ることによって、オブジ ェクトについて多くを知ることができる。 たとえペニーファージングが何であるか知らないとしても 、それが自転車であると聞けば、2つの車輪とハンドルとペダルを持つことがわかる。### オブジェクト指向のシステムではこれをさらに発展させて、クラスを他のクラスから定義できるようになっている。 例えば、マウンテンバイク、レース用自転車、二人乗り自転車は異なる 種類の自転車である。 オブジェクト指向の技術用語では、マウンテンバイク、レース用自転車、二人乗り自転車はすべて自転車クラスのサブクラスと言う。 同様に、自転車クラスはマウンテンバイク、レ ース用自転車、二人乗り自転車のスーパークラスと言う。
それぞれのサブクラスがスーパークラスから(変数宣言のかたちで)状態を継承する。 マウンテン バイク、レーシング自転車、二人乗り自転車は、ペダルをこぐ速度や、スピードのような状態を共有する。 同じく、それぞれのサブクラスはスーパークラスからメソッドを継承する。 マウンテンバイク 、レーシング自転車、二人乗り自転車は、ブレーキをかけたり、スピードを換えたりする振る舞いを共有する。
しかし、サブクラスはスーパークラスが持つ状態と振る舞いに限定されない。 (そのポイントは何であろうか?) サブクラスは、スーパークラスから継承したものに変数とメソッドを追加することが できる。 二人乗り自転車には、2つのシートと2つのハンドルがついている。一方マウンテンバイクには、ギアの歯車比を軽減する特別のギアがついている。
サブクラスは継承したメソッドをオーバーライドして、これらのメソッドの実装を特殊化することもできる。 例えば、特別なギア付きのマウンテンバイクを持っていた場合、「ギア変更」メ ソッドをオーバーライドすれば、実際に新しいギアを使用することができる。
継承の1階層に制限されない。継承ツリーやクラス階層と言われ、必要なだけ深くすることができる。 メソッドと変数は階層レベルの終わりまで継承される。 階層が深くなるほど、振る舞いはより特殊になる 。
継承の利益
- サブクラスは、スーパークラスによって提供される共通の要素を基本として特殊化された振る舞いをする。 継承を 使用して、プログラマは何度もスーパークラスのコードを再利用することができる。
- プログラマは、「一般的な」振る舞い(抽象クラスと呼ばれる)を定義するスーパークラスを実装することができる。 スーパークラスの本質は定義されて、部分的に実装されているかも知れないが、クラス の多くが未定義・未実装のままである。 他のプログラマがサブクラスに特殊化する詳細を埋め 込むのである。
![]() ![]() ![]() ![]() |
目次 |