ruby中的私有方法和保护方法

  ruby中的私有方法是指方法只能被隐含调用,不能被显示调用。而当没有显示接收者的时候,会把self当成接收者。因此,只能在自身中调用私有方法,这也是私有方法的调用规则。

  ruby的私有方法机制目的是:使得你很容易将方法分为两种,外部世界可以访问的方法和外部世界不可以访问的方法。

如下:

 1 class A
 2     def a
 3         self.method
 4     end
 5     def method
 6         p "hello world"
 7     end
 8     private :method
 9 end
10 A.new.a

  method定义成私有方法,不能直接调用,只能通过a调用,但是方法a中是不能正常运行的。因为私有方法是要隐式调用的。去掉self就可以了。method的默认接收者就是A的实例对象,而method也是A的实例方法。

 

私有方法和单例方法的区别:

  单例方法是某个对象的方法,它属于这个对象,默认情况它是公有的,当然你也可以设置它为私有。

  私有的非单例方法,可以被任意数目的对象共享,但需要从合适的场合调用,是否可以调用私有方法的决定因素,不在于想要给哪个对象发送消息,而在于发送消息时哪个对象是self。

 

保护方法:

  保护方法调用规则:只要默认对象self和你想要调用的方法所属的对象是同一个类的实例,你就可以调用该保护方法。

  它的目的是让某个类的实例和该类的另一个实例协作完成某些任务。

如下:

 1 class A
 2     def initialize(n)
 3         @n = n
 4     end
 5     
 6     def n
 7         @n
 8     end
 9     
10     def compare(c)
11         if c.n > n 
12             puts "The other object is bigger"
13         else
14             puts "THe other object is smaller"
15         end
16     end
17     protected :n 
18 end
19 c1 = A.new(100)
20 c2 = A.new(20)
21 c1.compare(c2)

  这个程序是用来比较两个数的大小,它们都是同一个类的实例。因此用protected方法是合法的。

 

继承和私有方法

  子类继承父类的方法访问权限规则。如果类C有一组访问权限规则,且类D是C的子类,那么D的实例将表现出和C的实例一样的访问权限规则。但是,如果类D中定义设置了新的访问权限规则,这样,新的规则将优先于继承的规则。

转载于:https://www.cnblogs.com/smallbottle/p/3872611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值