Ruby1.8のクラス変数は継承されてしまうようです(1.9ではされないように変更)。
一般的に(?)クラス変数という言葉から類推される挙動を求める場合は、クラスインスタンス変数を使います。「クラスのインスタンス変数」と「クラスインスタンス変数」は別物であることに注意。ややこしー。
逆にクラスインスタンス変数を使うと継承で初期化されないというデメリットがある。その場合は次のようにして初期化することができる。
class C
@var = 1
class << self
attr_accessor :var
def inherited(klass)
klass.var ||= var
super
end
end
def disp
self.class.var
end
end
class D < C
end
p D.var # => 1参考