【问题标题】:Is Ruby private method accessible in sub class?Ruby 私有方法可以在子类中访问吗?
【发布时间】: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 #=&gt; true。至于这种行为是否在所有 oop 语言中都是正确的,我认为您将其作为问题的一部分提出来是过度的。

标签: ruby private-methods


【解决方案1】:

以下是来自this source的简要说明:

  1. 任何人都可以调用公共方法——没有访问控制。默认情况下,方法是公共的(初始化除外,它始终是私有的)。
  2. 受保护的方法只能由定义类及其子类的对象调用。访问权限保留在家庭内部。
  3. 不能使用显式接收器调用私有方法。因为在使用它们时不能指定对象,所以只能在定义类中调用私有方法,并由同一对象内的直接后代调用。

来自类似问题的答案更详细地扩展了该主题:https://stackoverflow.com/a/1565640/814591

【讨论】:

  • 谢谢。他们已经足够解释了。
猜你喜欢
  • 2017-12-20
  • 2017-01-01
  • 1970-01-01
  • 2013-06-15
  • 2014-05-30
  • 1970-01-01
  • 2017-07-15
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多