親クラスを継承した子クラスで、同名のメソッドを呼び出すときに使う
class Human
def sleep
puts "寝た"
end
end
class Programmer < Human
def sleep
super
puts "しかし何故かぐっすり眠れない"
end
end
programmer = Programmer.new
programmer.sleep
#実行結果
#寝た
#しかし何故かぐっすり眠れない
親クラスで定義しているメソッドと同名のメソッドを子クラスで再定義することをオーバーライドという。
使用例としては、deviseで、コントローラの処理を変更する場合に使ったりする
ちなみに、オーバーライドしたメソッドに対する引数は、自動的にsuperに対する引数にもなる
両方でデフォルト値を設定した場合、子クラスで設定したデフォルト値を参照する。しかし、super()
と、からの()
をつけてやると、子クラスのデフォルト値を無視し、親クラスのデフォルト値を参照する