Ruby/Przedefiniowywanie metod: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 3:
W podklasie możemy zmienić zachowanie instancji poprzez przedefiniowanie metod z nadklasy.
<source lang="ruby">
end | end▼
▲ruby> Czlowiek.new.przedstaw_sie
▲ruby> class Student1 < Czlowiek
▲ | def przedstaw_sie
end
▲ | puts "Jestem studentem."
| end▼
Student1.new.identify #=> Jestem studentem.
| end▼
</source>
Przypuszczalnie moglibyśmy tylko ulepszyć metodę <tt>przedstaw_sie</tt> z nadklasy zamiast całkowicie ją podmieniać. Do tego celu możemy użyć słowa kluczowego <tt>super</tt>.
<source lang="ruby">
#=> Jestem osoba.
# Jestem rowniez studentem.
</source>
<tt>super</tt> pozwala nam przekazywać argumenty do oryginalnej metody. Czasem mówi się, że
<source lang="ruby">
end
▲<tt>super</tt> pozwala nam przekazywać argumenty do oryginalnej metody. Czasem mówi się, że są dwa rodzaje ludzi...
▲ruby> class Nieuczciwy < Czlowiek
▲ | def koszt_biletu(wiek)
▲ | super(11) # chcemy skromna oplate
▲ruby> Nieuczciwy.new.koszt_biletu(25)
▲ruby> class Uczciwy < Czlowiek
</source>
▲ | def koszt_biletu(wiek)
▲ | super(wiek) # przekazujemy argument ktory dostalismy
▲ruby> Uczciwy.new.koszt_biletu(25)
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Dziedziczenie|poprz=Dziedziczenie|nastart=Ruby/Kontrola dostępu|nast=Kontrola dostępu}}
|