Ruby中的public、protected和private

Ruby中的public、protected和private


栗子1:

class Person

? public

? def my_public_method

? ? 'I am a public method'

? end

? protected

? def my_protected_method

? ? 'I am a protected method'

? end

? private

? def my_private_method

? ? 'I am a private method'

? end

end

person1 = Person.new

嘗試:

? ? puts person1.my_public_method

? ? 輸出:I am a public method

? ? puts person1.my_protected_method

? ? 輸出:main.rb:617:in `': protected method `my_protected_method' called for # ? (NoMethodError)

? ? puts person1.my_private_method

? ? 輸出:main.rb:618:in `': private method `my_private_method' called for #(NoMethodError)

得出:public能被實(shí)例對(duì)象調(diào)用,protected和private不能被實(shí)例對(duì)象直接調(diào)用

栗子2:

class Person

? public

? def my_public_method

? ? 'I am a public method'

? end

? def access_method

? ? puts my_public_method

? ? puts my_protected_method

? ? puts my_private_method

? end

? protected

? def my_protected_method

? ? 'I am a protected method'

? end

? private

? def my_private_method

? ? 'I am a private method'

? end

end

person1 = Person.new

person1.access_method

輸出:

? ? I am a public method

? ? I am a protected method

? ? I am a private method

得出:public、protected、private方法都可以被定義他們的類訪問(wèn)

栗子3:

class Person

? public

? def my_public_method

? ? 'I am a public method'

? end

? protected

? def my_protected_method

? ? 'I am a protected method'

? end

? private

? def my_private_method

? ? 'I am a private method'

? end

end

class Man < Person

? def access_method

? ? puts my_public_method

? ? puts my_protected_method

? ? puts my_private_method

? end

end

son = Man.new

son.access_method

輸出:

? ? I am a public method

? ? I am a protected method

? ? I am a private method

得出:public、protected、private方法都可以被定義他們的類的子類訪問(wèn)

栗子4:

class Person

? public

? def call_method_protected(testmember)

? ? puts testmember.my_protected_method

? end

? def call_method_private(testmember)

? ? puts testmember.my_private_method

? end

? def my_public_method

? ? 'I am a public method'

? end

? protected

? def my_protected_method

? ? 'I am a protected method'

? end

? private

? def my_private_method

? ? 'I am a private method'

? end

end

person1 = Person.new

person2 = Person.new

嘗試:

? ? person2.call_method_protected(person1)

? ? 輸出:

? ? I am a protected method

? ? person2.call_method_private(person1)

? ? 輸出:

? ? main.rb:720:in `call_method_private': private method `my_private_method' called for #(NoMethodError)

得出:protected方法可以被其他的實(shí)例對(duì)象訪問(wèn),而private方法不可以。

總結(jié):

public方法可以被定義它的類和子類訪問(wèn),并可以被類和子類的實(shí)例對(duì)象調(diào)用;

protected方法可以被定義它的類和子類訪問(wèn),不能被類和子類的實(shí)例對(duì)象調(diào)用,但可以被該類的實(shí)例對(duì)象(所有)訪問(wèn);

private方法可以被定義它的類和子類訪問(wèn),不能被類和子類的實(shí)例對(duì)象調(diào)用,只能在自身中調(diào)用私有方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,894評(píng)論 18 399
  • 就像做了一場(chǎng)夢(mèng),夢(mèng)醒了,房子沒(méi)了。 一個(gè)月前的周一,晚上八點(diǎn)多,我還沒(méi)下班,突然接到我妹的電話:“姐,速來(lái),興濟(jì)河...
    清風(fēng)師妹閱讀 552評(píng)論 3 1
  • 工作十年,順風(fēng)順?biāo)瑥娜肼毧荚嚨揭淮未芜M(jìn)步,仿佛都是理所應(yīng)當(dāng)。還算親密的同事,把自己看做晚輩的領(lǐng)導(dǎo),得心應(yīng)...
    平靜如初閱讀 1,398評(píng)論 0 0
  • 大多數(shù)我們感到難過(guò)無(wú)非是因?yàn)橛W约旱挠?,他人的欲望。自己有欲望,就?huì)去拼命爭(zhēng)取,欲望越強(qiáng),被束縛地也就...
    三上三葉閱讀 1,131評(píng)論 0 1

友情鏈接更多精彩內(nèi)容