今回はrubyの継承についてイメージ出来るようにコード無しで解説していきます
こんな人にオススメ
- 継承ってよくわからない…
- 継承ってよく聞くけど、イメージができない…
こんな人に向けた記事になっています
⚠わかりやすさを重視していますので、厳密な部分は違う場所もあります
継承とは?
継承とは、一言で表すと
「力を受け継ぐ」
です!
なにかスーパーマンみたいですね笑
画像では、「白い人間」に「バリアを使える人間」を継承しています
すると白い人間はパワーアップし、バリアを使える様になります!
この様に、力を受け継ぐ事が継承です
Rubyでは継承を使う事で、別の機能を受け継ぐ事ができます
Rubyでの継承とは?
Rubyには色々と機能が書かれたクラスというものが存在しています
Aクラス
- 「おはよう」という機能
- 色を青くする機能
Bクラス
- 「こんにちは」という機能
- 色を赤くする機能
クラスには色々と機能が書かれているため
BのクラスをAのクラスに継承すれば、AのクラスはBの機能を使える様になります
Bが継承されたAクラス
- 「おはよう」という機能
- 色を青くする機能
- 「こんにちは」という機能
- 色を赤くする機能
AクラスはBクラスの機能を受け継ぐ事ができていますね
これが継承のイメージです!
継承を使うルール
機能を受け継ぐとありますが、何でもかんでも継承を使うのはいい方法ではありません
継承を使うにはどうすれば良いのか?見ていきましょう!
抽象と具体で説明できる
継承を考えるときに大切なのが、抽象と具体の関係で説明できるか?が大切なります
説明出来ないのであれば継承は使わない方がいいです
魚クラス
- 泳ぐ
- 水の中で生活をする
この様に、魚クラスには
魚が一般的に使える機能が記述されています
現実世界では、マグロもヒラメも「泳ぐ」「水の中で生活できる」は共通してできますよね?
つまり、継承での抽象とは
共通している部分は別の場所に定義しておき、それを継承させるという事になります
これをRubyで実現するにはどうすれば良いでしょうか?
魚の能力をマグロ、ヒラメに与えればできそうですね
魚が一般的に使える機能をどこかに定義しておき、
マグロ、ヒラメをプログラムで作ったときに、魚の機能を継承させれば
マグロ、ヒラメたちは一瞬で魚になることができるという事です
ポイント
マグロクラス < 魚クラスを継承
- 泳ぐ
- 水の中で生活できる
抽象概念の魚クラスを継承させることで、魚の機能がマグロでも使える様になります!
プログラミングはわかりやすさが大切なので、
抽象と具体の関係を無視して継承してしまうと、もうわけが分からなくなってしまいます…
そのため抽象と具体の関係を把握しながら、継承を行っていきます
ここで、別話になってしまいますが、
もし継承を使わずにマグロやヒラメに魚の能力を与えるにはどうすればいいでしょうか?
これは1つ1つに魚の機能を書いていくになります
- カツオクラスに魚の機能を作っていく
- ヒラメクラスに魚の機能を作っていく
とカツオ、ヒラメ、アジ、と増えるたびに
1つ1つ魚の機能を記述していかないといけません…
これは大変ですし、同じコードがめちゃめちゃ増えますよね…
継承できるクラスは1つだけ
継承できるクラスは1つだけなります
マグロクラスが魚クラスを継承してしまったら、もう他のクラスを継承する事できません
マグロクラスに、魚クラスと船クラスを継承させようとしているが、これはできません
そのため、継承はクラスに対して1つずつ継承していきます
生物クラスがあり
魚クラス < 生物クラス
魚クラスは生物クラスを継承している
マグロクラス < 魚クラス
マグロクラスは魚クラスを継承している
これは、
- 魚クラスは1つだけ生物クラスを継承している
- マグロクラスは1つだけ魚クラスを継承してる
が実現できています!
また、
生物クラスは魚クラスの抽象
魚クラスはマグロクラスの抽象
抽象と具体の関係にもなっています
ちなみに、
魚クラスは生物クラスの力を受け継いでいるため、
魚クラスを継承した、マグロクラスは結果的に生物クラスの力も備わっています!
ポイント
継承は抽象と具体で説明できる
継承できるものは1つだけ
以上が継承の説明でした!
読んでいただきありがとうございます!