自分でもなんの根拠があったわけでもなく、いままでやってきた経験から継承先で定義したものはインスタンス作ったあとは継承先のものが使われるって思ってて、それをrubyでやってみたら違ったのではまった。
例えばこういう感じ。
class AAA WORK = "work" def initialize @work = WORK end def disp p @work end end class BBB < AAA WORK = "bbb" def disp p @work end end AAA.new.disp BBB.new.disp $ruby test.rb "work" "work"
なんでこうなるのかわからなくて、とりあえず継承先でコンストラクタ作ったら意図通りになった。
class AAA WORK = "work" def initialize @work = WORK end def disp p @work end end class BBB < AAA WORK = "bbb" def initialize @work = WORK end def disp p @work end end AAA.new.disp BBB.new.disp $ruby test.rb "work" "bbb"
継承されてないのかっていうとそうでもない。
class AAA WORK = "work" def initialize @work = WORK end def disp p @work end end class BBB < AAA WORK = "bbb" def disp p WORK end end AAA.new.disp BBB.new.disp $ruby test.rb "work" "bbb"
書いててなんとなくわかったような気がするけど、明示的にoverrideしないと継承元のやつが実行されるからってことなのかなあ。
あんまこういうことしなかったから、根本的なことがわかってなかったと思う。
勉強になる。