Ruby Users' Guide - メソッドの再定義

前 - コピー - 次 - 目次

### メソッドの再定義

サブクラスではスーパークラスのメソッドを再定義することによっ て，インスタンスの挙動を変更することができる．例えば，以下の ような例を考えてみよう．

     ruby> class Human
     ruby|   def print_id
     ruby|     print "I'm a man-kind.\n"
     ruby|   end
     ruby|   def train_toll(age)
     ruby|     print "割引料金でOKです.\n" if age < 12
     ruby|   end
     ruby| end
     nil
     ruby> Human.new.print_id
     I'm a man-kind.
     nil
     ruby> class Student1<Human
     ruby|   def print_id
     ruby|     print "I'm a student.\n"
     ruby|   end
     ruby| end
     nil
     ruby> Student1.new.print_id
     I'm a student.
     nil

print_idメソッドは再定義されているので，Student0での定義が呼 ばれている．しかし，メソッドを再定義する時に，再定義する前の メソッドを利用したい時がある．このような場合に使うのが， `super'だ．`super'が呼ばれると，再定義前のメソッドが呼ばれる．

     ruby> class Student2<Human
     ruby|   def print_id
     ruby|     super
     ruby|     print "I'm a student too.\n"
     ruby|   end
     ruby| end
     nil
     ruby> Student2.new.print_id
     I'm a man-kind.
     I'm a studnet too.
     nil

`super'で呼び出された元のメソッドにはこのメソッドへの引数が そのまま引き渡される．もし，`super'に引数を渡せば，もとのメ ソッドがその引数で呼び出されることになる．

     ruby> class Student3<Human
     ruby|   def train_toll(age)
     ruby|     super(11) # 無条件で割引
     ruby|   end
     ruby| end
     nil
     ruby> Student3.new.train_toll(25)
     割引料金でOKです.
     nil

うーん，あまり良い例ではないが，感じはつかめたろうか．

前 - コピー - 次 - 目次