こんにちは!
今回はRubyのインスタンス変数と継承の動作について基本的なところで勘違いをしていたので、まとめたいと思います。
コード
class Box def initialize @item = 'apple' end def item @item end def input(item) @item = item end end class BigBox < Box end box = Box.new bigbox = BigBox.new box.input('banana') puts box.item puts bigbox.item
想定していた結果(誤り)
box = Box.new -> 'apple' bigbox = BigBox.new -> 'apple' puts box.item -> 'banana' puts bigbox.item -> 'banana'
実際の結果
box = Box.new -> 'apple' bigbox = BigBox.new -> 'apple' puts box.item -> 'banana' puts bigbox.item -> 'apple'
勘違いの理由
- 子でオーバーライドしていないメソッドは、親のメソッドが使われるため、インスタンス変数についても親のインスタンス変数が参照されると勘違いしていた
- クラスが設計図、インスタンスが実体というイメージから考えれば当たり前
おわりに
わかっているつもりでわかっていなかったので、早めに気づいてよかったです。実際にプログラムを書いているときにひっかかってしまったので、まとめてみました。
7/100