end aPeople = People.new("jimmy");#創(chuàng)建一個(gè)People的實(shí)例 puts aPeople.to_string #調(diào)用to_string方法 #puts aPeople.get_name_size #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ鼙Wo(hù) #puts aPeople.test #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ撬接蟹椒? aPeople.show_name puts aPeople.name aPeople.name = "楊俊明" #修改姓名 aPeople.show_name #再定義一個(gè)子類(lèi) class Man < People def initialize(_name) super @sex = true end
attr_reader:sex #定義只讀屬性sex
def call_protected_method puts get_name_size #調(diào)用父類(lèi)的受保護(hù)方法 end
def call_protected_method2(man1) puts man1.get_name_size #注意這里:這里可以把父類(lèi)的受保護(hù)方法,動(dòng)態(tài)添加到子類(lèi)實(shí)例 end
def call_private_method #子類(lèi)可以調(diào)用父類(lèi)的私有方法!!! 這一點(diǎn)剛開(kāi)始很不習(xí)慣 test end
def call_private_method2(man1) man1.test #注意這里:語(yǔ)法檢查雖然可以通過(guò),但是運(yùn)行時(shí)會(huì)提示私有方法無(wú)法調(diào)用,這也是private與protected的區(qū)別 end
end puts "******************************" aMan = Man.new("jimmy.yang"); aMan.show_name aMan.call_protected_method puts aMan.sex aMan.call_private_method aMan2 = Man.new("Mike") aMan.call_protected_method2(aMan2); #aMan.call_private_method2(aMan2); a = "abc"; #aMan.call_protected_method2(a); #雖然ruby本身對(duì)變量沒(méi)有類(lèi)型概念,但是這樣卻不行,即:在調(diào)用父類(lèi)的受保護(hù)方法時(shí),其實(shí)是要類(lèi)型匹配的 puts aMan.class #顯示aMan的類(lèi)名稱(chēng)
運(yùn)行結(jié)果如下:
復(fù)制代碼 代碼如下:
>ruby classDemo.rb My name is jimmy private method(test) in People. name = jimmy jimmy private method(test) in People. name = 楊俊明 ****************************** private method(test) in People. name = jimmy.yang 10 true private method(test) in People. 4 Man >Exit code: 0