#オーバーライドとは?
親クラス(スーパークラス)で定義されたメソッドについて、小クラス(サブクラス)で同じ名前で再定義すること。
#クラスの継承とは?
他のクラスをベースとして新しいクラスを作成することをクラスの継承と言います。
利用したいクラスが複数存在する場合、全てを1から作成していると骨が折れますし、共通する部分を複数のクラスに重複して定義する必要があります。
そこで、あるクラスが既に作成されている場合、そのクラスを拡張することで、新しいクラスを作成することができます。
クラスの継承は以下のように記載します。
class 子クラス名 < 親クラス名
end
#継承の具体例
class Days
def study
puts "勉強する"
end
end
class Holiday < Days
def sleep
puts "寝過ごす"
end
end
holiday = Holiday.new
holiday.study
実行結果
勉強する
#オーバーライドの具体例
class Days
def study
puts "勉強する"
end
end
class Holiday < Days
def sleep
puts "寝過ごす"
end
def study
super
puts "休日だろうと勉強しなければ"
end
end
holiday = Holiday.new
holiday.study
実行結果
勉強する
休日だろうと勉強しなければ
#サブクラスにメソッド定義がない場合
サブクラスで定義していないメソッドが呼び出された時は、スーパークラスに同じ名前のメソッドがある場合に限り、スーパークラスのメソッドが呼び出せます。
具体例を以下に載せました。
class Days
def study
puts "勉強する"
end
end
class Holiday < Days
end
holiday = Holiday.new
holiday.study
実行結果
勉強する
#superclassメソッド
全てのクラスは、クラスメソッドとしてsuperclassメソッド
を持っています。
また、スーパークラスのメソッドを引数なしで呼び出したい時には、super()
も使用できます。