Ruby/Przedefiniowywanie metod
< Ruby
Przedefiniowywanie metod
edytujW 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.