From: matz@... (Yukihiro Matsumoto) Date: 1998-04-21T14:19:16+09:00 Subject: [ruby-list:7669] Re: private and protected まつもと ゆきひろです In message "[ruby-list:7668] Re: private and protected" on 98/04/21, 助田 雅紀 writes: |助田です |C++にはきっと子供は知らなくてもいいこともあるという大人の |理屈があるんでしょう。(^^; 大人って汚い…^^;;; |> * そのメソッドが定義されているクラスかそのサブクラスからし |> か呼び出せないメソッド |すいません。違いがよく理解できません。 |C++の protectedもメソッドが定義されているクラスかそのサブクラ |スからしか呼び出せないように思いますが、私は何か勘違いしてます? |さらにruby の private と protectedの違いはどこにあるのかも理解 |できません。 ちょっとややこしいですね.整理しましょう. rubyのprivateは関数形式(レシーバを省略した形式)でしか呼び出 せないメソッドです.ということはselfに対してしか呼べないとい うことで,結果的にそのクラスまたはサブクラスからしか呼ぶこと が出来ません. rubyのprotectedはselfがそのメソッドを定義したクラス(またはモ ジュール)またはそのサブクラスである場所からしか呼べません. こちらはレシーバを指定した形式でも呼び出せます. つまり,privateは自分からしか見えないメソッドであるのに対し て,protectedは一般の人からは見られたくないが,仲間(クラスが 同じオブジェクト)からは見えるメソッドです. protectedは例えば2項演算子の実装にもう一方のオブジェクトの状 態を知る必要があるか調べる必要があるが,そのメソッドをpublic にして,広く公開するのは避けたいというような時に使います. C++の方はpublicもprotectedも同じクラスからは呼び出せます(そ うらしい)ので,rubyのような区別はありません(よね). まつもと ゆきひろ /:|)