У підкласі ми можемо змінити поведінку екземплярів клас перевизначивши методи суперкласу.
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
Або, скажімо, ми вирішили розширити метод identifity суперкласу замість того, щоб замінити його. Для цього ми можемо використовувати оператор 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