- コピー - - 目次

メソッドの再定義


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


 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

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


- コピー - - 目次