受保护和私人之间的区别

时间:2014-03-19 15:50:16

标签: ruby protected access-modifiers private-methods

我想知道Ruby中私有和受保护之间的区别,有很多来源,但它们通常只告诉我私有方法不能继承,但有很多不同的方式。

class Person  
  private

  def hello
    puts "hello"
  end
end

class Student < Person

  def initialize
    hello
  end
end

leo = Student.new

但是这个非常简单的例子证明了这种说法是错误的,私有方法是继承和使用的。此外,如果我在这里将'private'更改为'protected',它仍会给我“hello”,同时创建leo变量。那么它如何与公众保护并受到保护?

2 个答案:

答案 0 :(得分:2)

请查看此博文Ruby Access Control

来自消息来源:

每个人都可以调用

公共方法 - 不强制执行访问控制。类的实例方法(这些方法不仅属于一个对象;相反,类的每个实例都可以调用它们)默认是公共的;有人可以打电话给他们initialize方法始终是私有的。

受保护的方法只能由定义类及其子类的对象调用。访问权归家庭所有。但是,受保护的使用是有限的。

无法使用显式接收器调用

私有方法 - 接收器始终为self。这意味着只能在当前对象的上下文中调用私有方法;你不能调用另一个对象的私有方法。

此外,我建议您阅读本书The Ruby Programming Language

答案 1 :(得分:0)

我发现在网上搜索的第一件事是:

http://blog.zerosum.org/2007/11/22/ruby-method-visibility

与其他语言的最大区别似乎是私有方法可以被子类调用,但只有没有显式接收器(即使它是 self )。这里的Receiver是指Smalltalk OO的一种方式,即调用对象上的方法可以看作是向对象发送消息。 当你写'&#34;你好&#34;在你的例子中,它没有显式接收器,隐式接收器是self,所以它有效,尽管它与其他一些OO语言的语义相矛盾。