前書き
オブジェクト指向の3つの特徴それぞれの理解が曖昧なので記事を通じて理解(どんな時に使うのなど)を深めたいと思います.
⚠️本記事は継承に焦点を合わせて作成します。
継承とは?
⇨子クラスを作成すること.
子クラスとは.
⇨親クラスのメソッドも使用できるクラスのこと.
親クラスと子クラスの例↓
例
# Parentクラスの定義 class Parent # initializeメソッドの定義 def initialize(name) @name = name end # メソッドの定義 def greet puts "こんにちは、親クラスの#{@名前}です!" end end # Childクラスの定義(Parentクラスを継承) class Child < Parent # initializeメソッドをオーバーライド # メソッドの定義 def introduce puts "やあ、#{@名前}です。#{@年齢}歳です。子クラスからです!" end end # Parentクラスのインスタンス生成 parent = Parent.new("Parent") # Childクラスのインスタンス生成 child = Child.new("Child", 10) # メソッドの呼び出し parent.greet child.greet child.introduce
コードの解説. ↓の箇所でParentクラスの子クラスを作成するという意味の書き方
class Child < Parent
継承の嬉しいところ
- 複数の同じコードを1つにまとめることができ保守性が高まる。
上のコードをよく見ると.
子クラスにgreetメソッドが定義されていないのに実行されている。
child.greet
これで実行できるのは継承したことで親クラスに定義されているメソッドは子クラスでも実行可能
これを継承なしで表すと以下のようになる Parentクラス
class Parent 一部省略 def greet puts "こんにちは、親クラスの#{@名前}です!" end end
Childクラス
class Child 一部省略 def greet puts "こんにちは、親クラスの#{@名前}です!" end end
と同じメソッドの同じ処理が各クラスに定義されておりgreetメソッドの中身を変更しようとすると2箇所変えないといけないので保守性(メンテナンス性)が悪くなる。