`
gagi
  • 浏览: 46427 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ruby之二public、protected、private

    博客分类:
  • ruby
阅读更多
public方法,可以被定义它的类和其子类访问,可以被类和子类的实例对象调用;
protected方法,可以被定义它的类和其子类访问,不能被类和子类的实例对象直接调用,但是可以在类和子类中指定给实例对象;
private方法,可以被定义它的类和其子类访问,私有方法不能指定对象。

示例:

1、实例对象不能访问protected,private方法,但是本类之间的方法可以调用protected,private方法

class Person
  def talk
    puts "public :talk"
    speak
  end

  protected
  def speak
    puts "speak"
    laugh
  end

  private
  def laugh
    puts "private laugh"
  end

end


p1 = Person.new
p1.talk
#p1.speak 实例对象不能访问protected方法
#p1.laugh 实例对象不能访问private方法

 2、protected,private方法可以在子类的方法被调用

class Person

  protected
  def speak
    "protected:speak "
  end

  private
  def laugh
    " private:laugh"
  end

end


class Student < Person
  def useLaugh
    puts laugh
  end

  def useSpeak
    puts speak
  end
end

p2=Student.new
p2. useLaugh # private:laugh
p2. useSpeak # protected:speak

3、私有方法不能指定对象

class Person

  protected
  def speak
    "protected:speak "
  end

  private
  def laugh
    "private:laugh"
  end

  def useLaugh(another)
    puts another.laugh #这里错误,私有方法不能指定对象
  end

  def useSpeak(another)
    puts another.speak
  end

end


p1=Person.new
p2=Person.new

p2.useSpeak(p1) # protected:speak
#p2.useLaugh(p1)

 

 

分享到:
评论
2 楼 mogrub 2013-07-08  
http://tenderlovemaking.com/2012/09/07/protected-methods-and-ruby-2-0.html
这篇文章的解释还是比较清晰
1 楼 夜鸣猪 2012-02-23  
这是我看到的最清楚的解释
明白是一回事,说清楚是另一回事
另外,public是默认,除了initialize默认private

相关推荐

    Ruby中的public、private、protected区别小结

    重点关注private与protected public 默认即为public,全局都可以访问,这个不解释 private C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”. 意思是:C++中,对于类...

    简单谈谈Ruby的private和protected

    Ruby作为一种动态类型的面向对象语言,提供了`public`、`protected`和`private`三种访问控制级别,分别对应不同的可见性和使用场景。本文将重点讨论`private`和`protected`两种访问控制修饰符,并通过示例代码来深入...

    Ruby 之 class 中的 private、 protected、public

    Private private 函数只能 在本类和子类的 上下文中调用,且只能通过self访问。 这个意思就是:private函数,只能在本对象内部访问到。 对象实例变量(@)的访问权限就是 private。 代码如下: class AccessTest def ...

    Ruby定义私有方法(private)的两种办法

    如果在一个类中定义了多个方法,然后使用`private`,那么从`private`之后的所有方法都会变成私有,直到遇到另一个访问修饰符(如`public`或`protected`)为止。 私有方法在Ruby中的应用广泛,例如在封装对象的状态...

    ruby基础教程中文第四版

    类有继承、模块(module)的引入以实现多重继承的效果,以及访问控制符(public、private、protected)。 6. **异常处理**:Ruby提供了try-catch机制,通过`begin-rescue-end`来处理程序运行时可能出现的错误。 7....

    Programming-Ruby-1.9.pdf

    - **访问控制**: Ruby提供了public、private和protected等关键字来控制成员的可见性。 - **变量类型**: 包括局部变量、实例变量、类变量和全局变量。 #### 六、容器、块与迭代器 - **容器**: 包括数组和哈希等数据...

    Hello, Ruby World!

    - **访问控制**:Ruby支持三种不同级别的访问控制:公共(`public`)、受保护(`protected`)和私有(`private`)。 ##### 4. 单例方法 - **定义**:单例方法是在特定对象实例上定义的方法,而不是在类级别定义的...

    Ruby编程语言

     7.2方法可见性:PUBLIC、PROTECTED、PRIVATE232  7.3子类化和继承234  7.4对象创建和初始化241  7.5模块247  7.6加载和请求模块252  7.7单键方法和EIGENCLASS257  7.8方法查找258  7.9常量查找261  第8章...

    ruby 1.9 教程

    - **访问控制**: 如何在Ruby中使用public、protected和private关键字来控制类成员的访问权限。 - **变量**: 包括实例变量、类变量、全局变量等不同类型的变量。 ##### 3. 容器、块和迭代器 - **容器(Container)**: ...

    RUBY语言入门教程

    - **封装**:通过访问控制修饰符(public、protected、private)来保护内部状态。 - **模块与混入**:模块用于封装一组相关的类和方法,可以被其他类通过混入的方式使用。 #### 四、常用库与框架 - **标准库**:...

    Ruby语言中文教程

    - 封装:Ruby中可以通过访问控制符(public、private、protected)来管理对象内部数据的可见性。 3. **模块(Module)** - 模块是用来封装代码的机制,可以包含常量、方法和类定义,通过`include`或`extend`...

    Ruby语言教程大纲.zip

    - 封装:通过访问控制符(public, private, protected)实现数据封装,保护内部状态不被外部直接修改。 - 多态:不同类的对象可以响应相同的消息,实现代码的复用和扩展。 2. **基本语法** - 变量:Ruby有局部...

    Ruby语言教程和经典案例

    - **访问控制**:虽然Ruby默认不强制访问控制,但可以通过`public`、`protected`、`private`等关键字实现对方法和变量的访问控制。 **5. 模块(Module)** 模块是Ruby中的另一个重要概念,主要用于组织代码和提供...

    Ruby基础知识之类

    方法的访问性Ruby提供了三种方法访问性:public、private和protected。 - `public`:默认的访问级别,可以在任何地方调用。 - `private`:私有方法,只能在类内部调用,不能通过对象实例直接调用。 - `protected`:...

Global site tag (gtag.js) - Google Analytics