Ruby/Przedefiniowywanie metod
Z Wikibooks, biblioteki wolnych podręczników.
< Ruby
[edytuj] Przedefiniowywanie metod
W podklasie możemy zmienić zachowanie instancji poprzez przedefiniowanie metod z nadklasy.
class Czlowiek def przedstaw_sie puts "Jestem osoba." end def koszt_biletu(wiek) if wiek < 12 puts "Oplata ulgowa."; else puts "Oplata normalna."; end end end Czlowiek.new.przedstaw_sie #=> Jestem osoba. class Student1 < Czlowiek def przedstaw_sie puts "Jestem studentem." end end Student1.new.przedstaw_sie #=> Jestem studentem.
Przypuszczalnie moglibyśmy tylko ulepszyć metodę przedstaw_sie z nadklasy zamiast całkowicie ją podmieniać. Do tego celu możemy użyć słowa kluczowego super.
class Student2 < Czlowiek def przedstaw_sie super puts "Jestem rowniez studentem." end end Student2.new.przedstaw_sie #=> Jestem osoba. # Jestem rowniez studentem.
super pozwala nam przekazywać argumenty do oryginalnej metody. Czasem mówi się, że ludzi dzielimy na dwa rodzaje...
class Nieuczciwy < Czlowiek def koszt_biletu(wiek) super(11) # chcemy skromna oplate end end Nieuczciwy.new.koszt_biletu(25) #=> Oplata ulgowa. class Uczciwy < Czlowiek def koszt_biletu(wiek) super(wiek) # przekazujemy argument ktory dostalismy end end Uczciwy.new.koszt_biletu(25) #=> Oplata normalna.