スーパークラスのメソッドを呼び出す

広告

スーパークラスのメソッドがサブクラスでオーバーライドされた場合に、スーパークラスのメソッドを明示的に呼び出すことが可能です。スーパークラスのメソッドを呼び出すにはオーバーライドしたメソッドの中で「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("加速しました")」が実行されることになります。

サンプルプログラム

それでは実際に試してみましょう。

InheritTest3.rb

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 )