本「ルビープログラミング言語」の第7.3.5章「継承とインスタンス変数」では、次のように述べています。
インスタンス変数は継承とは関係がないため、サブクラスで使用されるインスタンス変数は、スーパークラスのインスタンス変数を「シャドウ」することはできません。サブクラスが、その祖先の 1 つによって使用される変数と同じ名前のインスタンス変数を使用する場合、その >祖先の変数の値を上書きします。これは、祖先の動作を変更するために意図的に行うことも、不注意で行うこともできます。後者の場合、ほぼ確実にバグが発生します。前述のプライベート メソッドの継承と同様に、これが、スーパークラスの実装に精通している (そして制御できる) 場合にのみ、Ruby クラスを安全に拡張できるもう 1 つの理由です。
私は自分のテストを作成しましたが、サブクラスのインスタンス変数はスーパークラスに影響を与えないようです
私のRubyバージョン
bob@bob-ruby:~$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
bob@bob-ruby:~$
以下はコードです
class Point
attr_accessor :x,:y
def initialize(x,y)
@x,@y=x,y
end
end
class Point3D < Point
attr_accessor :x,:y,:z
def initialize(x,y,z)
@x=x
@y=y
@z=z
end
end
irb(main):052:0> p=Point.new(1,2)
=> #<Point:0x87e8968 @x=1, @y=2>
irb(main):053:0> q=Point3D.new(4,5,6)
=> #<Point3D:0x87e423c @x=4, @y=5, @z=6>
irb(main):054:0> q.x
=> 4
irb(main):055:0> p.x
=> 1
irb(main):056:0>