オーバーライドしているメソッドを呼び出す　super

>指定したモジュールを self の継承チェインの先頭に「追加する」ことで `self の定数、メソッド、モジュール変数を「上書き」`します。
>
>継承チェイン上で、`self のモジュール/クラスよりも「手前」に追加されるため、結果として self で定義されたメソッドは override` されます。
...
継承によってこの「上書き」を処理するため、prependの引数として渡したモジュールのインスタンスメソッドでsuperを呼ぶことで `self のモジュール/クラスのメソッドを呼び出す`ことができます。

https://docs.ruby-lang.org/ja/latest/method/Module/i/prepend.html#:~:text=%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB,%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

# superを呼ぶことでprependしたクラスのモジュール/クラスのメソッドを呼び出す
```rb
irb(main):001* module X
irb(main):002*   def foo
irb(main):003*     puts "X1" # (1x)
irb(main):004*     super # (2x)
irb(main):005*     puts "X2" # (3x)
irb(main):006*   end
irb(main):007> end
irb(main):008>
irb(main):009* class A
irb(main):010*   prepend X
irb(main):011*
irb(main):012*   def foo
irb(main):013*     puts "A" #(1a)
irb(main):014*   end
irb(main):015> end
irb(main):016>
irb(main):017> A.new.foo
X1
A
X2
=> nil
```
https://docs.ruby-lang.org/ja/latest/method/Module/i/prepend.html#:~:text=%E4%BE%8B-,%23%20super%20%E3%81%A8%20prepend%20%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AE%E4%BE%8B%0Amodule%20X%0A%20%20def%20foo%0A%20%20%20%20puts%20%22X1%22%20%23%20(1x)%0A%20%20%20%20super%20%23%20(2x)%0A%20%20%20%20puts%20%22X2%22%20%23%20(3x)%0A%20%20end%0Aend%0A%0Aclass%20A%0A%20%20prepend%20X%0A%0A%20%20def%20foo%0A%20%20%20%20puts%20%22A%22%20%23(1a)%0A%20%20end%0Aend%0A%0AA.new.foo,-%23%20(1x)%20(2x)(%E3%81%93%E3%81%93

# 最初に呼び出したのはクラスのメソッド
```rb
irb(main):001* module X
irb(main):002*   def foo
irb(main):003*     puts "X1" # (1x)
irb(main):004*     super # (2x)
irb(main):005*     puts "X2" # (3x)
irb(main):006*   end
irb(main):007> end
irb(main):008>
irb(main):009* class A
irb(main):010*   prepend X
irb(main):011*
irb(main):012*   def hoge
irb(main):013*     puts "A" #(1a)
irb(main):014*   end
irb(main):015> end
irb(main):016>
irb(main):017> A.new.foo
X1
(irb):4:in `foo': super: no superclass method `foo' for #<A:0x00000001048fd130> (NoMethodError)
Did you mean?  for
```
# super
>superは`現在のメソッドがオーバーライドしているメソッドを呼び出し`ます。括弧と引数が省略された場合には現在のメソッドの引数がそのまま引き渡されます。引数を渡さずにオーバーライドしたメソッドを呼び出すには super() と括弧を明示します。

```rb
irb(main):053* class Foo
irb(main):054*   def foo(arg=nil)
irb(main):055*     p arg
irb(main):056*   end
irb(main):057> end
irb(main):058>
irb(main):059* class Bar < Foo
irb(main):060*   def foo(arg)
irb(main):061*     super(5)       # 5 を引数にして呼び出す
irb(main):062*     super(arg)     # 5 を引数にして呼び出す
irb(main):063*     super          # 5 を引数にして呼び出す super(arg) の略記法
irb(main):064*     arg = 1
irb(main):065*     super          # 1 を引数にして呼び出す super(arg) の略記法
irb(main):066*     super()        # 引数なしで呼び出す
irb(main):067*   end
irb(main):068> end
irb(main):069> Bar.new.foo 5
5
5
5
1
nil
```
https://docs.ruby-lang.org/ja/latest/doc/spec=2fcall.html#super:~:text=super%20%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%89%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%8B%AC%E5%BC%A7%E3%81%A8%E5%BC%95%E6%95%B0%E3%81%8C%E7%9C%81%E7%95%A5%E3%81%95%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E5%BC%95%E6%95%B0%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%BC%95%E3%81%8D%E6%B8%A1%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E5%BC%95%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%95%E3%81%9A%E3%81%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%89%E3%81%97%E3%81%9F%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%81%AB%E3%81%AF%20super()%20%E3%81%A8%E6%8B%AC%E5%BC%A7%E3%82%92%E6%98%8E%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

# prependされたモジュールのメソッドがオーバーライドしている
```rb
irb(main):001* module A
irb(main):002*   def hihi
irb(main):003*     "hihi"
irb(main):004*   end
irb(main):005> end
=> :hihi
irb(main):006* class B
irb(main):007*   prepend A
irb(main):008*   def hihi
irb(main):009*     "hihi_dance"
irb(main):010*   end
irb(main):011> end
=> :hihi
irb(main):012> B.new.hihi
=> "hihi"
irb(main):013> exit
```
```rb
irb(main):001* module A
irb(main):002*   def hihi
irb(main):003*     super
irb(main):004*   end
irb(main):005> end
=> :hihi
irb(main):006* class B
irb(main):007*   prepend A
irb(main):008*   def hihi
irb(main):009*     "hihi_dance"
irb(main):010*   end
irb(main):011> end
=> :hihi
irb(main):012> B.new.hihi
=> "hihi_dance"
```