Rubyのマニュアルには「privateは自クラス及びサブクラスからしか参照できません。」とあるが、正確には、自インスタンスの内部からしか参照できないような感じ。
Javaでは、同一クラスであれば別のインスタンスのprivateメソッドも呼べるのであるが…
public class Hoge { public void publicMethod(Hoge hoge) { // 別のインスタンスでも、同一クラス内なのでprotectedは呼べる hoge.protectedMethod(); // 別インスタンスのprivateメソッドも呼べる hoge.privateMethod(); } protected void protectedMethod() { } private void privateMethod() { } }
Rubyでは別インスタンスのprivateメソッドは呼ぶ事は出来ない。
class Hoge def public_method(hoge) # 同一のクラスであれば、protectedメソッドは呼べるが… hoge.protected_method # privateメソッドはレシーバを指定できないので呼べない hoge.private_method() # だめ end protected def protected_method end private def private_method end end
まとめ、Rubyのアクセス修飾子は、