当前位置 博文首页 > rudy 重载方法 详解

    rudy 重载方法 详解

    作者:admin 时间:2021-02-07 09:23

    在子类里,我们可以通过重载父类方法来改变实体的行为.

    ruby> class Human
        |   def identify
        |     print "I'm a person.\n"
        |   end
        |   def train_toll(age)
        |     if age < 12
        |       print "Reduced fare.\n";
        |     else
        |       print "Normal fare.\n";
        |     end
        |   end
        | end
       nil
    ruby> Human.new.identify
    I'm a person.
       nil
    ruby> class Student1<Human
        |   def identify
        |     print "I'm a student.\n"
        |   end
        | end
       nil
    ruby> Student1.new.identify
    I'm a student.
       nil  


    如果我们只是想增强父类的 identify 方法而不是完全地替代它,就可以用 super.

    ruby> class Student2<Human
        |   def identify
        |     super
        |     print "I'm a student too.\n"
        |   end
        | end
       nil
    ruby> Student2.new.identify
    I'm a human.
    I'm a student too.
       nil  


    super 也可以让我们向原有的方法传递参数.这里有时会有两种类型的人...

    ruby> class Dishonest<Human
        |   def train_toll(age)
        |     super(11) # we want a cheap fare.
        |   end
        | end
       nil
    ruby> Dishonest.new.train_toll(25)
    Reduced fare. 
       nil

    ruby> class Honest<Human
        |   def train_toll(age)
        |     super(age) # pass the argument we were given
        |   end
        | end
       nil
    ruby> Honest.new.train_toll(25)
    Normal fare. 
       nil   

    js
下一篇:没有了