1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】初学者向け-クラスの継承について

Posted at

本記事ではクラスの継承についてまとめていきます。

目次
・クラスの継承について

クラスの継承について

クラスの継承
…既存のクラスの機能を新しいクラスに引き継ぎ、再利用や拡張を行うための仕組み。
 共通の機能を親クラス(スーパークラス)にまとめ、子クラス(サブクラス)に継承することができる。

基本のクラス継承の書き方

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

# 親クラスの元々のメソッドを使用して返ってきた結果
=> "今日のご飯は焼肉です"

# 子クラスで、親クラスのメソッドをオーバーライドしたメソッドを使用して返ってきた結果
=> "今日の晩ご飯は焼肉です"
1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?