スーパークラスのメソッドを呼び出す
スーパークラスのメソッドがサブクラスでオーバーライドされた場合に、スーパークラスのメソッドを明示的に呼び出すことが可能です。スーパークラスのメソッドを呼び出すにはオーバーライドしたメソッドの中で「super」を使って呼び出します。
具体的には次にようになります。
class Car
def accele
print("アクセルを踏みました¥n")
end
end
class Soarer < Car
def accele
super
print("加速しました¥n")
end
end
「super」は特殊なメソッドと考えて下さい。メソッドの中で「super」メソッドを実行すると、スーパークラスの中でその呼び出されたメソッドと同じメソッド名を持つメソッドを探して実行します。
よって上記のサンプルで「Soarer」クラスの「accele」メソッドがオブジェクトから実行された場合、まず「super」メソッドが実行されます。「super」メソッドは同名のメソッド名を持つスーパークラスのメソッドを実行しますのでスーパークラスの「accele」メソッドで定義されている「print("アクセルを踏みました")」が実行されます。そしてその次に「print("加速しました")」が実行されることになります。
サンプルプログラム
それでは実際に試してみましょう。
class Car
def accele
print("アクセルを踏みました¥n")
end
end
class Soarer < Car
def accele
super
print("加速しました¥n")
end
end
soarer = Soarer.new
soarer.accele
soarer = Soarer.new
soarer.accele
上記を実行すると次のように表示されます。
このようにスーパークラスのメソッドの内容を完全に書き換えるのではなく、スーパークラスのメソッドを利用しつつサブクラス側で追加の機能を記述する形でメソッドをオーバーライドすることが可能です。
( Written by Tatsuo Ikura )
RubyLife