Ruby中访问控制符public,private,protected区别总结
2012-09-05 12:44
344 查看
重点关注private与protected
意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法。
Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法。
因为Ruby的原则是“private意为你不能指定方法接收者”,接收者只能是self,且self必须省略!
所以Ruby中子类可以访问父类的private方法。但self.private_method是错的。
注:ruby的访问控制不同于java,没有包的区别。
其它包中的类只要引用目标类,和目标类同包下类访问控制规则相同。
参考:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility
标签: Rails
>>转载请注明:转载自Ruby迷,谢谢!
public
默认即为public,全局都可以访问,这个不解释private
C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”.意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法。
Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法。
因为Ruby的原则是“private意为你不能指定方法接收者”,接收者只能是self,且self必须省略!
所以Ruby中子类可以访问父类的private方法。但self.private_method是错的。
protected
可以在本类或子类中访问,不能在其它类中访问。测试代码(public均可访问,代码略)
class A def test protected_mth private_mth self.protected_mth #self.private_mth #wrong obj = B.new obj.protected_mth #obj.private_mth #wrong end protected def protected_mth puts "#{self.class}-protected" end private def private_mth puts "#{self.class}-private" end end class B < A def test protected_mth private_mth self.protected_mth #self.private_mth #wrong obj = B.new obj.protected_mth #obj.private_mth #wrong end end class C def test a = A.new #a.protected_mth #wrong #a.private_mth #wrong end end A.new.test B.new.test C.new.test
注:ruby的访问控制不同于java,没有包的区别。
其它包中的类只要引用目标类,和目标类同包下类访问控制规则相同。
参考:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility
标签: Rails
>>转载请注明:转载自Ruby迷,谢谢!
相关文章推荐
- Ruby中访问控制符public,private,protected区别总结
- Ruby中访问控制符public,private,protected区别总结
- Ruby中访问控制符public,private,protected区别总结
- Java中的访问控制符的区别:private,default,protected,public
- java中访问控制符public、private、protected、default之间的区别
- c#中访问修饰符public,private,protected,internal,protected internal的区别
- public,private,protected的区别,继承方法与访问权限
- php的public、protected、private三种访问控制模式的区别
- php的public、protected、private三种访问控制模式的区别
- Java【public、private、protected区别】-访问权限
- 访问修饰符public,private,protected和default的区别?
- java 中 private public protected default 访问权限的区别
- c#中访问修饰符public、private、protected、internal的区别
- 访问控制中默认,public,private,protected区别?
- java基础学习总结——public,private,protected,和默认的区别
- php的public、protected、private三种访问控制模式的区别
- public、private、protected、default 访问权限的区别以及其它的Java修饰词
- Java中public,private,protected的区别,包的访问权限
- public、private、protected区别-访问权限
- php中的public、protected、private三种访问控制模式及self和parent的区别(转)