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