クラスの継承・オーバーライドとは?(Ruby)

こんにちは、にゅ〜ぶるです。

前回は、オブジェクト指向について書いたので、その続きを書いておこうと思います。

今回は、「クラスの継承」「オーバーライド」について。

継承とは?

「継承」とは、クラスの共通部分をまとめたクラスを作り、それを継承することをいいます。継承される側のクラスを「スーパークラス(親クラス)」、継承して新しく作ったクラスを「サブクラス(子クラス)」と言います。

では、実際に前回の例を用いて、説明していきましょう。

共通部分をまとめる?

前回の例で使いました、人間クラスを思い出してみてください。

# 人間クラス
class Person
  # 名前(name)のゲッター
  def name
    @name
  end
 
  # 名前(name)のセッター
  def name=(name)
    @name = name
  end

  # 自己紹介
  def selfIntroduction
    p "こんにちは、#{self.name}です。"
  end
end

この人間クラスを継承して、にゅ〜ぶるクラスを作りましょう。

Rubyでは、継承する際は、「子クラス < 親クラス」と書きます。

# にゅ〜ぶるクラス
class Newburu < Person
end

継承する事で、親クラスのプロパティ・メソッドが、子クラスでもそのまま利用する事が出来ます

newburu = Newburu.new
newburu.name = "にゅ〜ぶる"
newburu.selfIntroduction

実行結果

"こんにちは、にゅ〜ぶるです。"

さて、継承するメリットはなんでしょう?
今回は、にゅ〜ぶるクラスを作りましたが、Aさんクラス、Bさんクラスと、量産した際、プロパティ・メソッドを毎回書く必要がなくなりますね!
ここに、各クラス独自のプロパティ・メソッドを追加して、拡張するだけで良いんです。

でも、自己紹介って、人それぞれですよね。そんな時、どうしたら良いでしょう?
その時に使うのが、「オーバーライド」です。そう、名前の通り、上書きをします。

Rubyでは、これも簡単にかけます。

# にゅ〜ぶるクラス
class Newburu < Person
  # 自己紹介
  def selfIntroduction
    p "こんちゃー、#{self.name}やで!!"
  end
end

そう、こんな感じに、単純に書き直すだけ。
Rubyでは、メソッドが呼ばれた時、自クラスから親クラスの順に検索され、存在すればそのメソッドが実行されます。

実行結果

"こんちゃー、にゅ〜ぶるやで!!"

クラスを継承して、カスタマイズしたい部分だけをオーバーライドする。
こうして、色々なクラスを作っていってくださいね!