■プログラミング学習
◎クラスの継承
Rubyでは、データの元になる設計図(クラス)を作り、その設計図を元に実態となるデータ(インスタンス)を作るというのが手順になります。
このクラスに親子関係を作ることをクラスの継承と呼びます
親子関係とは、既存のクラスの情報を元に新しいクラスを作ることを指しています。
このときの、新しいクラスを子クラス(またはサブクラス)、元になった既存のクラスを親クラス(またはスーパークラス)と呼びます。
クラスの継承がなぜ必要なのか。
答えは、クラスの継承を使うことで、共通する部分をまとめることができ、効率的になるからです。
例えば、たんぽぽ、ひまわり、コスモスのクラスを作成するなら、3つに共通する情報をまとめた花というクラスを
作成し、その花クラスを継承したクラスを作成したほうが効率的です。
そうすれば、各クラスは花が共通して持つ情報を引き続きつつ、それぞれ独自の情報を持つことができます
class Flower def initialize(flower_type,color) @name = flower_type @color = color end def info puts "種類:#{@name}、色:#{@color}" end end class Dandelions < Flower end dandelions = Dandelions.new("たんぽぽ","黄色") dandelions.info # ターミナル出力結果 # 種類:たんぽぽ、色:黄色
上記の通りで、Dandelionsのクラスには、何も記述していませんが、継承元のFlowerクラスのインスタンス変数及び
インスタンスメソッドを使うことができます。
◎子クラスに独自のインスタンスメソッド追加
こちらは子クラスに新しくメソッドを定義するだけになります。
class Flower def initialize(flower_type,color) @name = flower_type @color = color end def info puts "種類:#{@name}、色:#{@color}" end end class Dandelions < Flower def season puts "春" end end dandelions = Dandelions.new("たんぽぽ","黄色") dandelions.season # ターミナル出力結果 # 春
こちらは、Dandelionsクラス内に、seasonメソッドを新たに追加し、それを実行しています。
このように子クラスにインスタンスメソッドを追加することで、そのクラス固有のメソッドを定義することができます。
◎オーバーライド
親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができます。
これをメソッドのオーバーライドといいます。
class Flower def initialize(flower_type,color) @name = flower_type @color = color end def info puts "種類:#{@name}、色:#{@color}" end end class Dandelions < Flower def info puts "種類:#{@name}、色:#{@color},属名はタラクサクム属" end def season puts "春" end end dandelions = Dandelions.new("たんぽぽ","黄色") dandelions.info # ターミナル出力結果 # 種類:たんぽぽ、色:黄色,属名はタラクサクム属
上記の通り、Flowerクラスで定義されたinfoメソッドと同名のメソッドをDandelionsのクラス内で定義をしています。
これによって、Dandelionsのクラスを元に生成されたインスタンスでinfoメソッドを実行すると上書きされて処理が実行されるようになります。