【问题标题】:difference between protected and private受保护和私有的区别
【发布时间】:2014-04-26 00:23:18
【问题描述】:

我想知道 Ruby 中 private 和 protected 之间的区别,那里有很多来源,但他们通常只告诉我私有方法不能被继承,但有很多不同的方式。

class Person  
  private

  def hello
    puts "hello"
  end
end

class Student < Person

  def initialize
    hello
  end
end

leo = Student.new

但是这个非常简单的例子证明了这种说法是错误的,私有方法被继承和使用。此外,如果我在这里将“私人”更改为“受保护”,它仍然会给我“你好”,同时创建 leo 变量。那么公共和受保护的情况如何?

【问题讨论】:

标签: ruby protected access-modifiers private-methods


【解决方案1】:

我在网上找到的第一件事:

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

与其他语言的最大区别似乎是子类可以调用私有方法,但只能在没有显式接收者的情况下调用(即使它是self)。这里的接收器是指 Smalltalk OO 的一种方式,即调用对象上的方法可以看作是向对象发送消息。 当您在示例中只写“hello”时,它没有显式接收器,而隐式接收器是 self,因此它可以工作,尽管它与其他一些 OO 语言的语义相矛盾。

【讨论】:

    【解决方案2】:

    请看这篇博文Ruby Access Control

    来源:

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

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

    Private 方法不能使用显式接收器调用 - 接收器始终是自身。这意味着私有方法只能在当前对象的上下文中被调用;你不能调用另一个对象的私有方法。

    另外,我建议你阅读本书The Ruby Programming Language

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2012-09-28
      • 2019-07-24
      • 2012-06-13
      • 2011-05-20
      相关资源
      最近更新 更多