Ruby 之 class 中的 private、 protected、public

Private
private 函数只能 在本类和子类的 上下文中调用,且只能通过self访问。

这个意思就是:private函数,只能在本对象内部访问到。

对象实例变量(@)的访问权限就是 private。


代码如下:

class AccessTest
def test
return “test private”
end
def test_other(other)
“other object ”+ other.test
end
end
t1 = AccessTest.new
t2 = AccessTest.new

p t1.test # => test private

p t1.test_other(t2) # => other object test private

# Now make 'test' private

class AccessTest
private :test
end

p t1.test_other(t2) #错误 in `test_other': private method `test' called for #<AccessTest:0x292c14> (NoMethodError)

Protected
protect 函数只能 在本类和子类的 上下文中调用,但可以使用 other_object.function的形式。(这跟 C++ 的 private 模式等同)

这个的关键是 protected函数可以在同类(含子类)的其它对象的内部中使用。

# Now make 'test' protect

class AccessTest
protected:test
end

p t1.test_other(t2) # other object test private

Public
public 函数可以在任何地方调用。成员函数和常量的默认访问权限就是public。

(0)

相关推荐

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

    重点关注private与protected public 默认即为public,全局都可以访问,这个不解释 private C++, "private" 意为 "private to this class", 但是Ruby中意为 "private to this instance". 意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法. Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法. 因

  • 简单谈谈Ruby的private和protected

    下面这段程序让我纠结了很久,Ruby中private的概念真的很奇怪... class Test private def test_print puts 'test' end end class Test2 < Test def test_print2 # self.test_print #=> 这里加上self就不能调用,private method `test_print' called for # (NoMethodError) test_print #=> 不加self就能调用

  • Ruby 之 class 中的 private、 protected、public

    Private private 函数只能 在本类和子类的 上下文中调用,且只能通过self访问. 这个意思就是:private函数,只能在本对象内部访问到. 对象实例变量(@)的访问权限就是 private. 复制代码 代码如下: class AccessTest def test return "test private" end def test_other(other) "other object "+ other.test end end t1 = Acce

  • 详谈PHP中public,private,protected,abstract等关键字的用法

    PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等,下面我们就将对这些进行分析整理各个的用法. 变量与方法的关键字public,private,protected public的权限最大,既可以让子类使用,也可以支持实例化之后的调用, protected表示的是受保护的,访问的权限是只有在子类和本类中才可以被访问到 private 表示的是私有,只能

  • C++中类的三种访问权限解析:private、public与protect

    目录 C++类的三种访问权限:private.public与protect 类与面向对象 三种访问权限 关于类的访问权限(控制权限)的区别 三种成员控制权限的区别 总结 C++类的三种访问权限:private.public与protect 类与面向对象 C++中可以定义一个类. 定义一个类,其实就是把一堆实体的共同特征给提取出来.这种面向对象而不是面向过程的解决问题的思想,大大提升了复杂大型软件的开发效率. 比如在游戏开发中,需要生成一批属性相近.行为相似的怪物,那我们可以定义一个怪物类: cl

  • php class中public,private,protected的区别以及实例分析

    一,public,private,protected的区别public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有在本类中使用. 二,实例 复制代码 代码如下: <?phperror_reporting(E_ALL);class test{ public $public; private $private; protected $protected; static $instance; public  func

  • Java中的private、protected、public和default的区别(详解)

    (1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)对于protected修饰符,它主要的作用就是用来保护子类的.它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西. (3)对于default来说,有点的时候也成为friendly(友员),它是针对本包访问而设计的,任何处于本包下的类.接口.异常等,都可以相互访问,即使是父类没有用prote

  • Ruby和Ruby on Rails中解析JSON格式数据的实例教程

    Ruby解析JSON Ruby解析Json例子: json = '["a", "B", "C"]' puts "Unsafe #{unsafe_json (json).inspect}" #输出Unsafe ["a", "B", "C"] Ruby解析Json把上面的json字符串解析成Array.这样的方法并不安全,比如: json = 'puts "Da

  • 浅析php面向对象public private protected 访问修饰符

    PHP中有三种访问修饰符,分别是:     public(公共的.默认)     protected(受保护的)     private(私有的)public(公共的.默认)在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限.protected(受保护的)被声明为protected的成员,只允许该类的子类进行访问.private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制.对类外部不允许访问. 图解demo 复制代码 代码如下: cl

  • 如何直接访问php实例对象中的private属性详解

    前言 本文主要介绍了关于如何直接访问php实例对象中private属性的相关内容,在介绍关键部分之前,我们先回顾一下php面向对象的访问控制. 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的.被定义为公有的类成员可以在任何地方被访问.被定义为受保护的类成员则可以被其自身以及其子类和父类访问.被定义为私有的类成员则只能被其定义所在的类访问. 类属性必须定义为公有,受保护,私有之一.如果用 var 定义,则被视为公

  • 详解Ruby设计模式编程中对单例模式的运用

    简介       单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一个对象成为系统中的唯一实例.要实现这一点,可以从客户端对其进行实例化开始.因此需要用一种只允许生成对象类的唯一实例的机制,"阻止"所有想要生成对象的访问.使用工厂方法来限制实例化过程.这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义. 要点       显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例.    

  • PHP类与对象中的private访问控制的疑问

    复制代码 代码如下: class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo ext

随机推荐