野田です。

> @yの初期化の位置が間違っています。initializeの中でないと。

あ、本当ですね。nil以外だと初期化されてませんでした…。

> methodというメソッド名だからだめなのです。
> 他のメソッド名ならばちゃんと4が返ってきます。
(中略)
> 自分のクラスでは定義していないが、スーパークラスで定義
> されているメソッドの場合、method_missingに行かず、
> スーパークラスのメソッドが呼ばれるのです。

そういう原因だったのですね。
たしかに適当に他の名前のメソッドにしたら、うまくいきました!

最初、継承と委譲の違いがいまいちわかりませんでしたが、
委譲の場合は、上位下位という概念ではなくて、他のインスタンスに
処理をお願いするという感じなんですね。

ありがとうございました。

---
nonta / yo.rim.or.jp