みんなのちからになりたい

コピペでブログラムつくっていきたい

rubyのclassを継承してる時の定数ではまる

自分でもなんの根拠があったわけでもなく、いままでやってきた経験から継承先で定義したものはインスタンス作ったあとは継承先のものが使われるって思ってて、それを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しないと継承元のやつが実行されるからってことなのかなあ。
あんまこういうことしなかったから、根本的なことがわかってなかったと思う。
勉強になる。