First < Secondとする。 もう一度、前節のプログラムを以下に表示する。
---------------------------- Program Start ---------------------------- require 'ennClass' # 先ほどのプログラムを読み込んでいる。 class Taiseki def enchu(r,h) # 円柱の体積を求めるためのメソッド定義 a = Enn.new # 読み込んだプログラムの "Enn" クラスのインスタンスを # 生成している。 b = a.menseki(r) v = b * h return v end end if $0 == __FILE__ # 今回も付け加えるとよい。 a = Taiseki.new printf("円柱の体積は %f です。\n", a.enchu(2,5)) end ---------------------------- Program Start ----------------------------
ここで ``ennClass''のクラス ``Enn''を読み込んだあと、クラスの継承を
行う形式に変更する。
新しいクラスを「子クラス」または「サブクラス」、読み込む元になるクラスを
「親クラス」または「スーパークラス」などという。
すなわちファイルを ``require''し、
と言う形にする。
これにより、クラスの内容が新しいクラスに全て継承される(取り込まれる)こと
となる。
---------------------------- Program Start ---------------------------- require 'ennClass' # プログラムを読み込んでいる class Taiseki < Enn # クラスを継承して(取り込んで)いる def enchu(r,h) # 円柱の体積を求めるためのメソッド定義 b = menseki(r) # 円の面積計算 v = b * h return v end end if $0 == __FILE__ # 今回も付け加えるとよい。 a = Taiseki.new printf("円柱の体積は %f です。\n", a.enchu(2,5)) end ---------------------------- Program Start ----------------------------
クラスシートを目の前にしながら説明する。 また、二つのプログラムを良く見比べて頂きたい。 新しいプログラムでは、クラス ``Enn''のメソッドがそのままクラス ``Taiseki''に 継承されている。したがって、メソッド ``enchu(r,h)'' 中で、円の面積計算の ために、新しいインスタンスの生成をする必要がない。 すなわち「親クラス」のメソッドは、そのまま「子クラス」で使うことができる。 したがって、円の面積の計算は
旧プログラムのとき a = Enn.new b = a.menseki(r) となっているが、新しいプログラムでは b = menseki(r)となっている。
捕捉:「子クラス」と「親クラス」に同じメソッド名がある場合、そのメソッド を指定すると、「子クラス」のメソッドが優先(上書き)される。 「クラスのオーバーライド(override)」と言う。