Google

- コピー - - 目次

継承


モノの分類は階層的な場合が多い.例えば,「猫」は「ホ乳類」で あり,「ホ乳類」は「動物」である.ある分類は上の分類の性質を 受け継ぐ.これを継承と呼ぶ.例えば,「動物」が呼吸するので, 当然「猫」も呼吸する.

これをrubyで表現すると,


 ruby> class Animal
 ruby|   def breath
 ruby|     print "息を吸って,吐く\n"
 ruby|   end
 ruby| end
 nil

 ruby> class Cat<Animal
 ruby|   def bark
 ruby|     print "にゃ〜\n"
 ruby|   end
 ruby| end
 nil

となる.Catクラスでは呼吸について何も定義しなくても,Animal クラスの定義をそのまま受け継ぐことになる.で,この場合,「鳴 く」能力が追加されているわけだ.barkで「鳴く」ってのも変だが, この辺が英語力の限界だろう.


 ruby> tama = Cat.new
 #<Cat:0xbd80e8>
 ruby> tama.breath
 息を吸って,吐く
 nil
 ruby> tama.bark
 にゃ〜
 nil

ただし,いつも上のクラス(親クラスとかスーパークラスとか呼ぶ) の性質をそのまま下の方(子クラスとかサブクラスと呼ぶ)で受け継 ぐわけではない.例えば,「鳥」は飛ぶが,「ペンギン」は飛ばな い.つまり,「ペンギン」は「鳥」の「卵を産む」などのほとんど の性質を継承するが,「飛ぶ」性質だけは異なっている.これを再 定義と呼ぶ.

rubyで表現してみよう.


 ruby> class Bird
 ruby|   def lay_egg
 ruby|     # do something ..
 ruby|   end
 ruby|   def fly
 ruby|     #...
 ruby|   end
 ruby|   #...
 ruby| end
 nil

 ruby> class Penguin<Bird
 ruby|   def fly
 ruby|     fail "Penguins can't fly"
 ruby|   end
 ruby| end
 nil

こんな感じだ.こういう知識表現のようなことをrubyで書くのはちょっ と無理がある気もするが.

継承を使えば,共通の性質はスーパークラスで定義すれば,サブク ラスでは『違い』だけを,追加したり,再定義したりすれば良い. このことを「差分プログラミング」と呼ぶ人もいる.オブジェクト 指向プログラミングの嬉しい点のひとつだ.


- コピー - - 目次