是以private和protected的在ruby目前和Java的定義有很大的差別:
1、在不同對象執行個體當中的作用域不同
Java當中,不管private還是protected的方法,都可以被同一個類别的其他對象執行個體調用;
Ruby當中,private方法不能被同一個類别的其他對象執行個體調用;
2、在類繼承關系當中的作用域不同
ruby當中,不管private還是protected方法,都可以被子類繼承;
Java當中,private方法不能被子類繼承;
這種方法調用的差異,也許來自于不同的面向對象理念:Java的面向對象來自C++,強調類繼承關系,是以方法調用限定類繼承的層次結構當中的作 用域,卻不強調對象執行個體作用域;而ruby的面向對象來自smalltalk,即使是類别也是對象,是以方法調用作用域都是針對對象執行個體調用來設定的。
private 但是Ruby中意為 “private to this instance”.
你隻能在你本對象的執行個體中通路本對象的private方法。
因為Ruby的原則是“private意為你不能指定方法接收者”,接收者隻能是self,且self必須省略!
是以Ruby中子類可以通路父類的private方法。但self.private_method是錯的。
protected 方法 可以在本類或子類中通路,不能在其它類中通路。
在其他類中調用本類方法也不行