【Ruby入門】クラスの継承まとめ

こんにちは! フリーエンジニアの長瀬です。

クラスの継承ってなんだか難しそうだなって思っていませんか?

クラスの継承をマスターすれば、無駄に多くなりがちなクラスを整理することができます。

この記事では、クラスの継承について

・継承の方法
・継承の確認
・継承した時のinitialize

という基本的な内容から、

・メソッドのオーバーライド
・親クラスのメソッドを呼び出す
・複数の継承

といった応用的な内容についても解説していきます。

継承の方法

それではまず継承の方法について解説していきます。

Rubyの継承は「<」を使うことで行うことができます。

今回はAnimalクラスをDogクラスに継承してみましょう。

class Animal
  def name
    "animal"
  end
end

class Dog < Animal
end

dog = Dog.new
p dog.name

継承が成功し、DogクラスでもAnimalクラスのnameメソッドが使えていることがわかります。

このようにRubyでは「<」を使用することで簡単に継承を行うことができます。

一つ注意点があり、Rubyは継承を1クラスしか行うことができません。

そのため、複数の継承のように実装しようと思うと、後に説明するMixinという機能を使う必要があります。

継承の確認

次に継承を確認する方法について解説していきます。

継承は不等号を使用することで確認することができます。

class Animal
  def name
    "animal"
  end
end

class Dog < Animal
end

p Dog > Animal #=> false
p Dog < Animal #=> true

継承されていればtrue、されていなければfalseを返します。

このようにRubyでは直感的に継承の確認を行うことができます。

継承した時のinitialize

継承した際に気になるのがinitializeの扱いです。

initializeがわからない方はこちらを参考にしてください。

これは二つのパターンによって処理が異なります。

まずは、子クラスにinitializeメソッドが定義されていない場合です。
この場合、親クラスのinitializeメソッドが呼ばれます。

class Animal
  def initialize
    p "animal"
  end
end

class Dog < Animal
end

Animal.new #=> animal
Dog.new #=> animal

次に子クラスにinitializeメソッドが定義されている場合です。

この場合、子クラスのinitializeメソッドが呼び出されます。

class Animal
  def initialize
    p "animal"
  end
end

class Dog < Animal
  def initialize
    p "dog"
  end
end

Animal.new #=> animal
Dog.new #=> dog

メソッドのオーバーライド(上書き)

initializeのときと同じで、メソッドも親クラスと同じメソッドが子クラスで定義されている場合は子クラスのメソッドが呼び出されます。

まず、クラスメソッドの扱い方がわからない方は以下の記事を参考にしてください。

class Animal
  def bark
    p "ヌーン"
  end
end

class Dog < Animal
  def sit
    p "おすわり"
  end
end

class Cat < Animal
  def bark
    p "ニャン!"
  end
end

dog = Dog.new
dog.bark#=>"ヌーン"

cat = Cat.new
cat.bark#=>"ニャン!"

親クラスのメソッドを呼び出す

親メソッドはsuperを子クラスの同じ名前のメソッド内で使用することで呼び出すことができます。

さきほどのサンプルコードから、Dogクラス削除して、Catクラスのbarkメソッドにsuperを加えてみましょう。

class Animal
  def bark
    p "ヌーン!"
  end
end

class Cat < Animal
  def bark
    super
    p "ニャン!"
  end
end

cat = Cat.new
cat.bark
#=>
#"ヌーン!"
#"ニャン!"



複数の継承

Rubyでは複数の継承を行うことはできません。

そのため、モジュールという仕組みを利用して、複数継承しているように見せる実装を行います。
モジュールに関しては以下の記事をご参考にください!


【Ruby入門】includeの使い方とrequireとの違いについて解説!
更新日 : 2018年6月7日

まとめ

この記事では、クラスの継承を解説しました。

継承という概念は、難しく感じますが実際に書いてみると単純なものだということがわかります。

継承すれば、親クラスで定義されているメソッドを使えるようになるので、あるカテゴリー(今回の場合はAnimal)の共通要素を親クラスに定義して継承させれば、同じメソッドを何度も定義する必要がなくなり効率的です。

もしクラスの継承について忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。