引数があるスーパークラスのメソッドを呼び出す
スーパークラスのメソッドを呼び出す場合に引数があるメソッドの場合も通常のメソッドと同じように「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()」と呼び出すことでスーパークラスのメソッドを引数無しで呼び出すことが出来ます。
サンプルプログラム
それでは実際に試してみましょう。
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 )
RubyLife