メソッドのオーバーライド
親クラスから小クラスへと継承した際に、元のメソッドをオーバーライドすると、くさいコードが消えました。
そこで、オーバーライドについて調べました。
例
例えば、下記のようなクラスがあったとします。
class Japanese def hello puts 'こんにちは' end end class American < Japanese end japanese = Japanese.new japanese.hello =>こんにちは american = American.new american.hello =>こんにちは
こういうことになります。
これだと、アメリカ人が日本語をしゃべるので、英語で挨拶をしたいのに!ってなります(そういう設定)
なので、Japanese
のメソッドをオーバーライド(上書き)します。
class Japanese def hello puts 'こんにちは' end end class American < Japanese def hello puts 'hello' end end japanese = Japanese.new japanese.hello =>こんにちは american = American.new american.hello =>hello
いやいや、継承しているので、バイリンガルでしょ?って場合はこういう風にします。
class Japanese def hello puts 'こんにちは' end end class American < Japanese def hello super puts 'hello' end end japanese = Japanese.new japanese.hello =>こんにちは american = American.new american.hello =>こんにちは hello
追記
オーバーライドした方に引数がある場合です
その場合は元のメソッドにはないので、super()
と書いてあげます。
class Japanese def hello puts 'こんにちは' end end class American < Japanese def hello(name) super() puts "#{name} hello" end end american = American.new american.hello("foo") =>こんにちは =>foo hello
以上です。