本記事ではクラスの継承についてまとめていきます。
目次
・クラスの継承について
クラスの継承について
クラスの継承
…既存のクラスの機能を新しいクラスに引き継ぎ、再利用や拡張を行うための仕組み。
共通の機能を親クラス(スーパークラス)にまとめ、子クラス(サブクラス)に継承することができる。
基本のクラス継承の書き方
example_1.rb
class <親クラス名>
# 親クラスの定義
end
class <子クラス名> < <親クラス名>
# 子クラスの定義
# 親クラスとファイルが別でもクラス継承の効果が作用する
end
継承の例
example_2.rb
class Cooking
def menu
puts "今日のご飯は#{@food}です"
end
end
class Food < Cooking
def initialize(food)
@food = food
end
end
# 子クラスであるFoodが親クラスであるCookingを継承しているため、
# 親クラスのメソッドが利用できる。
food1 = Food.new('寿司')
food1.menu
=> "今日のご飯は寿司です"
food2 = Food.new('焼肉')
food2.menu
=> "今日のご飯は焼肉です"
オーバーライド
…子クラス内において、親クラスのメソッドと同名のメソッドを定義すると
メソッドの上書きが行えること。
オーバーライドの例
example_2.rb
class Cooking
def menu
puts "今日のご飯は#{@food}です"
end
end
class Food < Cooking
def initialize(food)
@food = food
end
# ここでオーバーライドする
def menu
# 親クラスのオーバーライド前のメソッドは「super」の記述で呼び出すことができる
super
# オーバーライドしたメソッド
puts "今日の晩御飯は#{@food}です"
end
end
# 子クラスであるFoodが親クラスであるCookingを継承しているため、
# 親クラスのメソッドが利用できる。
food1 = Food.new('寿司')
food1.menu
# 親クラスの元々のメソッドを使用して返ってきた結果
=> "今日のご飯は寿司です"
# 子クラスで、親クラスのメソッドをオーバーライドしたメソッドを使用して返ってきた結果
=> "今日の晩ご飯は寿司です"
food2 = Food.new('焼肉')
food2.menu
# 親クラスの元々のメソッドを使用して返ってきた結果
=> "今日のご飯は焼肉です"
# 子クラスで、親クラスのメソッドをオーバーライドしたメソッドを使用して返ってきた結果
=> "今日の晩ご飯は焼肉です"