MxLDevs
MxLDevs

Reputation: 19556

Calling super class' super class method?

How can I get child to ignore what its parent thinks is fun and go straight to the grandparent's idea of fun?

Child still inherits from the parent, but it just doesn't agree with a couple methods.

Calling the method of the super class of the super class?

Also, is it considered poor design if I'm in a situation where the child doesn't agree with its parents but agrees with the parent's parents?

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

Upvotes: 2

Views: 1602

Answers (1)

TCopple
TCopple

Reputation: 880

It's generally easier in Ruby to get this kind of behavior through composition rather than inheritance. To accomplish that Modules are included that contain the specific behaviors you wish a class to have.

But if you absolutely have to use inheritance you can do this:

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

This will do exactly what it says. Grab the instance method fun from the GrandParent class, attach it to the current instance object self and call it.

Upvotes: 6

Related Questions