我想访问父类中Derived类的方法。请建议
Class A
def methodA
end
def methodB
end
end
Class B < Class A
def methodC
end
def methodD
end
end
我想在methodB
中调用methodDClass A
def methodA
end
def methodB
methodD
end
end
感谢。
答案 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
,因为基本上通知所有具体类该方法可能需要覆盖。这个想法是:如果基础实现未定义,则子类必须定义钩子方法。