Yöntemleri Yeniden Tanımlama

Bir alt sınıfın davranışlarını, süper sınıfın yöntemlerini yeniden tanımlayarak değiştirebiliriz.

ruby>  class Insan
    |   def tanimla
    |     print "Ben bir insanim.\n"
    |   end
    |   def tren_bileti(yas)
    |     if yas < 12
    |       print "Indirimli ucret.\n";
    |     else
    |       print "Normal ucret.\n";
    |     end
    |   end
    | end
  nil
ruby>  Insan.new.tanimla
Ben bir insanim.
  nil
ruby>  class Ogrenci1<Insan
    |   def tanimla
    |     print "Ben bir ogrenciyim.\n"
    |   end
    | end
  nil
ruby>  Ogrenci1.new.tanimla
Ben bir ogrenciyim.
  nil

Örneğin süper sınıfın tanimla yöntemini tamamen yeniden tanımlamak yerine geliştirmek istediğimizi düşünelim. Bunun için super'i kullanıyoruz.

ruby>  class Ogrenci2<Insan
    |   def tanimla
    |     super
    |     print "Ben bir ogrenciyim, aynı zamanda.\n"
    |   end
    | end
  nil
ruby>  Ogrenci2.new.tanimla
Ben bir insanim.
Ben bir ogrenciyim, aynı zamanda.
  nil

super bizim orijinal yönteme argüman geçmemize izin verir. Bazen iki tür insan olduğunu söylerler...

ruby>  class Sahtekar<Insan
    |   def tren_bileti(yas)
    |     super(11) # ucuz tarife istiyoruz.
    |   end
    | end
  nil
ruby>  Sahtekar.new.tren_bileti(25)
Indirimli ucret.
  nil

ruby>  class Durust<Insan
    |   def tren_bileti(yas)
    |     super(yas) # verilen argümanı gecelim
    |   end
    | end
  nil
ruby>  Durust.new.tren_bileti(25)
Normal ucret.
  nil