2

親が楽しいと思っていることを子供に無視させて、祖父母の楽しい考えにまっすぐに向かわせるにはどうすればよいでしょうか?

子は依然として親から継承していますが、いくつかのメソッドに同意していません。

スーパークラスのスーパークラスのメソッドを呼び出す?

また、子供が親に同意せず、親の親に同意する状況にある場合、設計が悪いと見なされますか?

class Grandparent  
  def fun  
    #do stuff  
  end  
end

class Parent < Grandparent
  def fun
     super
     #parent does some stuff
  end

  def new_business
     #unrelated to my parent
  end
end

class Child < Parent  
  def fun
     super
     #child also does some stuff
  end

  def inherit_new_business
      new_business
      #stuff 
  end  
end
4

1 に答える 1

6

一般に、Ruby では、継承よりも構成によってこの種の動作を取得する方が簡単です。それを達成するためにModules、クラスに必要な特定の動作を含むものが含まれています。

ただし、継承を絶対に使用する必要がある場合は、次のようにすることができます。

class Child < Parent
  def fun
    GrandParent.instance_method(:fun).bind(self).call
    # fun child stuff
  end
end

これはまさにそれが言うことをします。GrandParent クラスからインスタンス メソッドfunを取得し、それを現在のインスタンス オブジェクトにアタッチしてself呼び出します。

于 2012-05-04T05:42:07.793 に答える