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