14. 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 İnsan
    |    def tanımla
    |       print "Ben insanım.\n"
    |    end
    |    def tren_bileti(yaş)
    |       if yaş < 12
    |          print "İndirimli ücret.\n"
    |       else
    |          print "Normal ücret.\n"
    |       end
    |    end
    | end
  :tren_bileti
ruby> İnsan.new.tanımla
Ben insanım.
  nil
ruby> class Öğrenci1 < İnsan
    |    def tanımla
    |       print "Ben öğrenciyim.\n"
    |    end
    | end
  :tanımla
ruby> Öğrenci1.new.tanımla
Ben öğrenciyim.
  nil

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

ruby> class Öğrenci2 < İnsan
    |    def tanımla
    |       super
    |       print "Ben öğrenciyim, aynı zamanda.\n"
    |    end
    | end
  :tanımla
ruby>  Öğrenci2.new.tanımla
Ben insanım.
Ben öğrenciyim, aynı zamanda.
  nil

super özgün yöntemin ilgili özelliğinin miras alınmasını sağlar. Bazen iki tür insan olduğunu söylerler...

ruby> class Sahtekar < İnsan
    |    def tren_bileti(yaş)
    |       super(11) # ucuz tarife istiyoruz.
    |    end
    | end
  :tren_bileti
ruby>Sahtekar.new.tren_bileti(25)
İndirimli ücret.
  nil
ruby> class Dürüst < İnsan
    |    def tren_bileti(yaş)
    |       super(yaş) # verilen bağımsız değişkeni aktaralım
    |    end
    | end
  :tren_bileti
ruby>Dürüst.new.tren_bileti(25)
Normal ücret.
  nil