引数があるスーパークラスのメソッドを呼び出す

広告

スーパークラスのメソッドを呼び出す場合に引数があるメソッドの場合も通常のメソッドと同じように「super」メソッドに引数を付けて呼び出すことができます。

具体的には次にようになります。

class Car
  def accele(acceletime)
    print(acceletime, "秒間アクセルを踏みました")
  end
end

class Soarer < Car
  def accele(acceletime)
    super(acceletime)
    print("加速しました")
  end
end

今回の場合、「Soarer」クラスのオブジェクトから「accele」メソッドを引数を付けて呼び出すと、メソッド内でスーパークラスの「accele」メソッドを引数を付けて呼び出します。

また「super」メソッドを呼び出す時の特別ルールとして、引数を指定せずに「super」メソッドを呼び出した場合にはサブクラスを呼び出した時に渡されてきた引数を付けて呼び出したものと同じことになります。

class Car
  def accele(acceletime)
    print(acceletime, "秒間アクセルを踏みました")
  end
end

class Soarer < Car
  def accele(acceletime)
    super
    print("加速しました")
  end
end

上記の例では「super」メソッドを引数無しで呼び出していますが、この場合は「super(acceletime)」と呼び出したものと同じ扱いとなります。もし明示的に引数無しでスーパークラスのメソッドを呼び出す場合には括弧()を省略せずに「super()」と呼び出すことでスーパークラスのメソッドを引数無しで呼び出すことが出来ます。

サンプルプログラム

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

InheritTest4.rb

class Car
  def accele(acceletime)
    print(acceletime, "秒間アクセルを踏みました¥n")
  end
end

class Soarer < Car
  def accele(acceletime)
    super
    print("加速しました")
  end
end

soarer = Soarer.new
soarer.accele(10)

上記を実行すると次のように表示されます。

スーパークラスのメソッドを引数付きで実行する

( Written by Tatsuo Ikura )