2

以下は、スーパークラス/サブクラス コンストラクトの例です。

C:\>irb --simple-prompt
>> class Parent
>> @@x = 10
>> end
=> 10
>> class Child < Parent
>> @@x = 12
>> end
=> 12
>> class Parent
>> puts "@@X = #{@@x}"
>> end
@@X = 12
=> nil

そして、上記も理解されています。しかし、2つのクラスがスタンドアロンクラスとして別々に定義されている場合、それらの間のスーパー/サブ関係を定義するために、可能かどうかを確認したかったのですか?

以下を試しましたが、うまくいきません。私が試した方法ではないかもしれません:

C:\>irb --simple-prompt
>> class Parent
>> @@X = 10
>> end
=> 10
>> class Child
>> @@x = 15
>> end
=> 15
>> class Child < Parent
>> def show
>> p "hi"
>> end
>> end
TypeError: superclass mismatch for class Child
        from (irb):7
        from C:/Ruby193/bin/irb:12:in `<main>'
>>
4

1 に答える 1

0

クラスが Ruby で宣言された後で、クラスのスーパークラスを変更することはできません。ただし、クラスに特定の動作を含めたい場合は、モジュールを使用して拡張できます。

module Parent
  def yell_at_kids
    puts "Stop hitting your brother!"
  end
end

class Child
  def have_children
    extend Parent
  end
end

Child.new.have_children.yell_at_kids

この場合、Parent は他のオブジェクトに含めたり拡張したりできるモジュールです (ここでの Child クラスのインスタンスのように)。クラスを別のクラスで拡張することはできませんが、クラスをモジュールで拡張することはできます。

于 2013-05-30T02:14:06.070 に答える