In einer Unterklasse können wir das Verhalten von Instanzen der Klasse ändern, indem wir die Methoden der Oberklasse überschreiben.
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
Oder sagen wir, wir haben beschlossen, die Methode * identifity * der Superklasse zu erweitern, anstatt sie zu ersetzen. Dazu können wir den * super * Operator verwenden. Diese Anweisung ruft eine Superklassenmethode auf.
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 * ermöglicht es uns, auch Parameter an die Methode der Superklasse zu übergeben. Dies kann nützlich sein, wenn Sie zuerst die empfangenen Daten ändern oder verarbeiten und dann die Verarbeitung von der Superklassenmethode verwenden müssen.
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