クラスインスタンス変数は継承されるか
Posted by Yoichiro Hasebe
RHGによると、クラスの特異クラスはスーパークラスの特異クラスを継承している。

ということは、クラスメソッドはサブクラスに受け継がれるということだ。ならばクラスインスタンス変数はどうなんだろう?これもサブクラスに受け継がれるのだろうか?
class Bird
#クラスインスタンス変数の設定
@can_fly = true
#特異クラスにアクセス
class << self
#クラスメソッドの設定
def can_fly?
@can_fly
end
end
end
class Sparrow < Bird
#クラスインスタンス変数の再設定
@can_fly = true
end
class Penguin < Bird
#クラスインスタンス変数の再設定
@can_fly = false
end
class Ostrich < Bird
#クラスインスタンス変数を設定しない
end
puts "Bird can fly: " + Bird.can_fly?.to_s
puts "Sparrow can fly " + Sparrow.can_fly?.to_s
puts "Penguin can fly: " + Penguin.can_fly?.to_s
puts "Ostrich can fly: " + Ostrich.can_fly?.to_sこれを実行すると
Bird can fly: true
Sparrow can fly true
Penguin can fly: false
Ostrich can fly:確かにクラスメソッドは継承されるけど、クラスインスタンス変数は継承されないことが分かった。考えてみるとクラス「インスタンス」変数なんだから当たり前だ。でもこうやってはっきり確認すると気持ちがいい。

