Rubyの継承(Inheritance)とは?コードの再利用と拡張の基本
Rubyでは、既存のクラスをもとに新しいクラスを作ることができる「継承(Inheritance)」という仕組みがあります。
これにより、共通の機能を親クラスにまとめて、子クラスで再利用・拡張することができます。
継承の基本構文
class Animal
def speak
puts "何かが鳴いています"
end
end
class Dog < Animal
end
dog = Dog.new
dog.speak # → 何かが鳴いています
このように、Dog < Animal
と書くことで、Animal クラスを継承した Dog クラスが定義されます。
メソッドのオーバーライド
class Dog < Animal
def speak
puts "ワンワン!"
end
end
dog = Dog.new
dog.speak # → ワンワン!
親クラスに定義されたメソッドを、子クラスで再定義することを「オーバーライド」といいます。
super の使い方
class Animal
def speak
puts "鳴き声:"
end
end
class Cat < Animal
def speak
super
puts "ニャー"
end
end
Cat.new.speak
super
は、親クラスの同名メソッドを呼び出すために使います。
親の機能を引き継ぎつつ、処理を追加したい場合に便利です。
initialize メソッドの継承と super
class Animal
def initialize(name)
@name = name
end
end
class Dog < Animal
def initialize(name, breed)
super(name)
@breed = breed
end
end
コンストラクタ initialize
も継承対象です。
親クラスの初期化を行うには、super
を使って親の initialize を呼び出す必要があります。
すべてのクラスは Object を継承
puts String.superclass # → Object
puts Object.superclass # → BasicObject
Rubyでは、すべてのクラスは Object
クラス(または BasicObject
)を継承しています。
これにより、共通のメソッド(to_s, inspectなど)がすべてのクラスで使えます。
継承とモジュール(Mixin)の違い
項目 | 継承 | モジュール(Mixin) |
書き方 | < を使う | include , extend |
親は何個? | 1つのみ | 複数可 |
目的 | クラスの拡張 | 共通機能の共有 |
Rubyでは単一継承のみ可能ですが、モジュールを使えば多くの機能を共有できます。
継承を使うメリット
- コードの重複を減らせる
- 共通処理を親にまとめて管理できる
- 機能の拡張・修正がしやすい
まとめ
Rubyの継承(Inheritance)は、クラス同士の関係を作り、共通の機能を再利用する仕組みです。
<
を使って親クラスを指定し、必要に応じて super
や オーバーライド
を使って柔軟に設計できます。
ただし、継承関係が深くなるとコードが複雑になりやすいため、適切な場面で使うことが大切です。
共通処理の共有だけなら モジュール
の活用も検討しましょう。