クラスを継承する
定義済みのクラスの機能を引き継いで新しいクラスを定義することができます。このように他のクラスをベースとして新しいクラスを定義することをクラスの継承と言い、元になったクラスのことをスーパークラス、継承して定義したクラスのことを子クラスと呼びます。ここでは Ruby でクラスを継承する方法について解説します。
(Last modified: )
目次
クラスを継承する
クラスを継承して新しいクラスを定義する方法です。具体的に作成しながら確認してみます。まずは基本となるクラスである「Car」クラスを定義します。
class Car def accele puts("アクセルを踏みました") end def brake puts("ブレーキを踏みました") end end
次に「Car」クラスを継承した「SportsCar」クラスを作成してみましょう。クラスを継承するにはクラス名の後に「<」を付けて敬称したいクラス名を記述します。
class クラス名 < 継承したいクラス名 end
よって次のように記述します。
class Car def accele puts("アクセルを踏みました") end def brake puts("ブレーキを踏みました") end end class SportsCar < Car def openRoof puts("ルーフを開けました") end end
今回は「SportsCar」クラスが「Car」クラスを継承しています。この時「Car」クラスは「SportsCar」クラスのスーパークラス又は親クラスと言い、「SportsCar」クラスは「Car」クラスのサブクラス又は子クラスと言います。
クラスを継承した場合、クラス自体で定義されたメソッドの他に親クラスで定義されているメソッドも使用することができます。先ほどの例で言えば「SportsCar」クラスのインスタンスは、「SportsCar」クラスで定義されている「openRoof」メソッドの他にスーパークラスで定義されている「accele」メソッドや「brake」メソッドも呼び出すことができます。
ここでもう1つ「FamilyCar」クラスを「Car」クラスを継承して設計してみます。
class Car def accele puts("アクセルを踏みました") end def brake puts("ブレーキを踏みました") end end class SportsCar < Car def openRoof puts("ルーフを開けました") end end class FamilyCar < Car def reclining puts("シートをリクライニングしました") end end
「SportsCar」も「FamilyCar」も同じ「Car」クラスを継承しています。共通する機能は「Car」クラスで定義し、独自の機能だけを継承したクラスで定義しています。
「SportsCar」クラスのインスタンスはスーパークラスで定義されているメソッドは呼び出すことができますが、同じスーパークラスを継承した「FamilyCar」クラスで定義されているメソッドは呼び出すことができません。
クラスを継承しない場合には「Soarer」クラスでも「Crown」クラスでも「accele」メソッドや「brake」メソッドを個別に定義する必要がありました。クラスを継承することで共通した部分は基本となるクラスとして抜き出すことができます。その結果、プログラムの再利用性も高まり、また必ず備えていなければならないメソッドなどを忘れずに備えることができます。
それでは実際に試してみましょう。
# encoding: UTF-8 class Car def accele puts("アクセルを踏みました") end def brake puts("ブレーキを踏みました") end end class SportsCar < Car def openRoof puts("ルーフを開けました") end end class FamilyCar < Car def reclining puts("シートをリクライニングしました") end end sc = SportsCar.new sc.openRoof sc.accele puts() fc = FamilyCar.new fc.reclining fc.brake
上記を実行すると次のように表示されます。
クラス内で定義されたメソッドだけではなく、スーパークラスで定義されているメソッドも呼び出すことができました。
-- --
Ruby でクラスを継承する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。