Ruby私有方法是否可以在子类中访问?

时间:2015-07-04 06:19:50

标签: ruby private-methods

我的代码如下:

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如何封装?

1 个答案:

答案 0 :(得分:9)

以下是this source的简要说明:

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

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