【发布时间】:2015-07-04 06:19:50
【问题描述】:
我的代码如下:
class A
private
def p_method
puts "I'm a private method from A"
end
end
class B < A
def some_method
p_method
end
end
b = B.new
b.p_method # => Error: Private method can not be called
b.some_method # => I'm a private method from A
b.some_method 调用在类A 中定义的私有方法。如何在继承它的类中访问私有方法?这种行为在所有面向对象的编程语言中都一样吗? Ruby 是如何进行封装的?
【问题讨论】:
-
您实际上是从子类的实例范围内访问基类的私有方法
p_method,很好。很明显为什么您不能从外部访问它。私有范围被保留,当你子类时它不会改变。 -
继承或封装与私有方法的问题有何关系?
-
@cremno - 谢谢。我觉得它有帮助。
-
注:
B.private_instance_methods.include? :p_method #=> true。至于这种行为是否在所有 oop 语言中都是正确的,我认为您将其作为问题的一部分提出来是过度的。
标签: ruby private-methods