Ruby:如何在基类中调用派生类方法

时间:2014-03-11 20:53:23

标签: ruby oop

我想访问父类中Derived类的方法。请建议

Class A

 def methodA
 end

 def methodB
 end

end

Class B < Class A

 def methodC
 end

 def methodD
 end

end

我想在methodB

中调用methodD
Class A
 def methodA
 end

 def methodB


 methodD
 end

end

感谢。

3 个答案:

答案 0 :(得分:3)

你写的是什么,对语法进行了一些清理。只要您的对象属于派生类B,它就知道methodD是什么。相反,如果您在其上调用A,则NameError类的对象会抛出methodB,因为它不知道methodD是什么。

class A

 def methodA
 end

 def methodB
   puts 'Called A#methodB'
   methodD
 end

end

class B < A

 def methodC
 end

 def methodD
   puts 'Called B#methodD'
 end

end

b = B.new
b.methodB
# Called A#methodB
# Called B#methodD

答案 1 :(得分:0)

只需调用方法。

class A
  def a
    b
  end
end

class B < A
  def b
    :b
  end
end

B.new.a
# => :b

调用方法会向接收方发送消息,在本例中为:b消息。如果对象响应消息,那么一切都会正常工作。

你也可以这样做:

a = A.new

def a.b
  :x
end

a.b
# => :x

答案 2 :(得分:0)

查看Template Method 设计模式

Class A
 def methodA
 end

 def methodB
 end

 def methodD
  raise NotImplementedError, 'Sorry, you have to override it!'
 end
end

Class B < Class A
 def methodC
 end

 def methodD
  puts "methodD"
 end
end

在这种情况下,methodD被称为Hook Method,因为基本上通知所有具体类该方法可能需要覆盖。这个想法是:如果基础实现未定义,则子类必须定义钩子方法。