ruby里的方法作用域

在java里private方法在Java当中的含义是只在当前类范围之内可以调用,当前类的子类也无法访问,但能被同一类别的其他对象实例调用.protected方法在Java当中的含义是在当前类所在的整个package当中都可见,其他package类则无法访问;

ruby里private,protected都可以被子类继承,但是都不能被实例调用.
protected可以被同类的(含子类)的其他对象中调用.

irb(main):001:0> class AccessTest
irb(main):002:1> def test
irb(main):003:2> "test private"
irb(main):004:2> end
irb(main):005:1> def test_other(other)
irb(main):006:2> "other object" + other.test
irb(main):007:2> end
irb(main):008:1> end
=> nil
irb(main):009:0> t1=AccessTest.new
=> #<AccessTest:0xb773e620>
irb(main):010:0> t2=AccessTest.new
=> #<AccessTest:0xb7737334>
irb(main):011:0> t1.test
=> "test private"
irb(main):012:0> t1.test_other(t2)
=> "other objecttest private"
irb(main):013:0> class AccessTest
irb(main):014:1> private :test
irb(main):015:1> end
=> AccessTest
irb(main):016:0> t1.test
NoMethodError: private method `test' called for #<AccessTest:0xb773e620>
from (irb):16
from :0
#private 实例是调用不到的
irb(main):017:0> class AccessTest
irb(main):018:1> def tt
irb(main):019:2> 'tt'
irb(main):020:2> end
irb(main):021:1> protected :tt
irb(main):022:1> end
=> AccessTest
irb(main):023:0> t1.tt
NoMethodError: protected method `tt' called for #<AccessTest:0xb773e620>
from (irb):23
from :0
#protected 实例也调用不到(包括子类)
irb(main):024:0> class Sun < AccessTest
irb(main):025:1> end
=> nil
irb(main):026:0> s=Sun.new
=> #<Sun:0xb770f564>
irb(main):027:0> class Sun
irb(main):028:1> def tt2
irb(main):029:2> tt
irb(main):030:2> end
irb(main):031:1> end
=> nil
irb(main):032:0> s.tt2
=> "tt"
irb(main):033:0> class Sun
irb(main):034:1> def tt3
irb(main):035:2> test
irb(main):036:2> end
irb(main):037:1> end
=> nil
irb(main):038:0> s.tt3
=> "test private"
#protected可以被子类继承
irb(main):039:0> class AccessTest
irb(main):040:1> protected :test
irb(main):041:1> end
=> AccessTest
irb(main):042:0> s.test_other(s)
=> "other objecttest private"
#protected可以在同类(含子类)的其它对象的内部中使用
irb(main):043:0> s.test
NoMethodError: protected method `test' called for #<Sun:0xb770f564>
from (irb):43
from :0
irb(main):047:0> class Sun
irb(main):048:1> public :test
irb(main):049:1> end
=> Sun
irb(main):050:0> s.test
=> "test private"
#可以单独改变子类的方法的作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值