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

オーバーライドしたメソッドの中からスーパークラスの同じ名前のメソッドを呼び出す場合に、メソッドに引数がある場合も同じように引数を指定して呼び出すことができます。ここでは Ruby で引数があるスーパークラスのメソッドを呼び出す方法について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 21 日更新)

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

オーバーライドしたメソッドの中からスーパークラスの同じ名前のメソッドを呼び出すには super を記述しますが、呼び出すメソッドに引数を指定する場合は次のように呼び出します。

super(引数, ...)

次の例を見てください。

class Car
  def accele(acceletime)
    puts(acceletime.to_s + "秒間アクセルを踏みました")
  end
end

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

「SportsCar」クラスのインスタンスを作成し、「accele」メソッドを引数を指定して呼び出すと、メソッド内でスーパークラスの「accele」メソッドを引数を指定して呼び出します。今回はオーバーライドしたときに指定した引数をそのまま指定してスーパークラスのメソッドを呼び出しましたが、異なる値を引数に指定して呼び出しても構いません。

なおオーバーライドしたメソッド呼び出すときに指定した引数をそのままスーパークラスのメソッドを呼び出すときに指定する場合は、引数を省略して単に super と呼び出しても同じ結果となります。

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

class SportsCar < Car
  def accele(acceletime)
    super
    puts("加速しました")
  end
end
サンプルコード

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

# encoding: UTF-8

class Car
  def accele(acceletime)
    puts(acceletime.to_s + "秒間アクセルを踏みました")
  end
end

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

sc = SportsCar.new
sc.accele(10)

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

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

-- --

Ruby で引数があるスーパークラスのメソッドを呼び出す方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。