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

Ruby类的public, protected和private访问控制

    博客分类:
  • Ruby
 
阅读更多

Ruby类下对访问控制的限制也是用public,protected和private来做的。虽然用的是和C++和Java相同的名字,但是Ruby下的protected和private定义还是有所不同的。

 

class ClassSuper
    attr_accessor :attr1
    def initialize
        @attr1 = "attr1"
    end

    private
    def privateMethod
        puts "this is private"
    end

    #protected = private which cannot be called directly
    protected
    def protectedMethod
        puts "this is protected"
    end
end

class ClassChild < ClassSuper

    public 
    def callProtected
        protectedMethod
    end

    def callPrivate
        privateMethod
    end

    def objProtected obj
        obj.protectedMethod
    end
    
    #this is invalid
    def objPrivate obj
        obj.privateMethod
    end
end

a = ClassChild.new
puts a.attr1
a.callProtected
a.callPrivate #private method is also inherited
#a.privateMethod #fail
#a.protectedMethod #fail

a.objProtected a
#a.objPrivate a #this is the difference between protected and private

 总结一下,Ruby的不同之处在于:

1. 父类的的private和protected都可以被子类所继承

2. protected和private一样不能被显式调用

3. protected和private的区别是protected可以在类的其他方法中以实例形式调用(如: obj.protectedMethod),而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编程语言

     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语言教程和经典案例

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

    ruby基础教程中文第四版

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

    ruby 1.9 教程

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

    Hello, Ruby World!

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

    Ruby语言教程大纲.zip

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

    Programming-Ruby-1.9.pdf

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

    Ruby语言中文教程

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

    ruby-oo-fundamentals-attribute-accessors-lab-sea01-seng-ft-07132

    此外,还可能探讨到访问权限(public, private, protected)在属性访问中的应用,以及如何在不破坏封装性的前提下,实现属性的动态修改。 在实际解压并查看源代码时,你会看到类定义、方法定义以及可能的测试用例。...

    RUBY语言入门教程

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

    ruby语法基础教程.pdf

    - Ruby提供了不同的访问级别来控制类内部数据的访问权限,包括public、protected和private。 **3.7 元类** - 元类是创建类的类,可以用来定制类的行为。 - 在Ruby中,每个类都有一个隐式的元类。 **3.8 变量** - *...

Global site tag (gtag.js) - Google Analytics