welcome: please sign in

2010-11-09 01:37:34時点のリビジョン34

メッセージを消す
location: 継承

継承

すでにあるクラスを拡張して新しいクラスを作ることができます。

このとき、もとのクラスの性質や機能は新しいクラスでも利用できます。

このことを継承といいます。


スーパークラス、サブクラス

クラス1を拡張してクラス2が作られたとき、

といい、次のような図で表わします。

スーパークラスのことを親クラス、サブクラスのことを子クラスと言うこともあります。

直接の親子でなく、親の親などのときでもスーパークラス、サブクラスと言います。


サブクラスの定義

作成するクラス名の後ろに

の形式で記述します。 上の図の関係のクラス2を作る場合は次のようになります。


属性の継承

スーパークラスで定義された属性はサブクラスに継承されます。

次のようにクラス1とクラス2が定義されている場合、

クラス1のインスタンスは

クラス2のインスタンスは

となります。 クラス1の項目にクラス2で定義された項目が加わった形です。


メソッドの継承

スーパークラスで定義されたメソッドはサブクラスでも利用できます。

例えば、スーパークラスであるItemクラスでメソッドdispName()が定義されている時を考えます。

Drinkクラスのインスタンスに対してdispName()メソッドの呼び出しが行われたらどうなるでしょうか。

サブクラスであるDrinkクラスでメソッドdispName()が定義されているかどうかで処理が異なります。

(1)DrinkクラスでメソッドdispName()が定義されていないとき

(2)DrinkクラスでメソッドdispName()が定義されているとき

スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することもできます。 この場合サブクラスで定義したメソッドが優先されます。(2)の場合です。

これをメソッドのオーバーライドといいます。

どのクラスのメソッドが実行されるのか

  1. インスタンスの属するクラスに対応するメソッドがあれば、それを実行する。
  2. 無いときはスーパークラスの同じ名前のメソッドを探して、それを実行する。
  3. 見つからないときは、親の親の親...と順に探します。
  4. どうしても見つからないときはエラーになります。


コンストラクタの継承

コンストラクタは継承されません。

サブクラスのコンストラクタが呼ばれたときは

  1. スーパークラスのコンストラクタで記述された処理
  2. サブクラスで記述された処理

の順に両方が行われます。


準備

Itemクラス


練習

前回作成した Itemクラスを継承してDrinkクラスを作ります。

属性の定義の部分は次のようになります。

Drinkクラス

このときmainメソッド内で

を行うとDrinkクラスのインスタンス(オブジェクト)が作成され 次のようになります。