まつもと ゆきひろです

In message "[ruby-list:7668] Re: private and protected"
    on 98/04/21, 助田 雅紀 <masaki.suketa / tonen.co.jp> writes:

|助田です

|C++にはきっと子供は知らなくてもいいこともあるという大人の
|理屈があるんでしょう。(^^;

大人って汚い…^^;;;


|>  * そのメソッドが定義されているクラスかそのサブクラスからし
|>    か呼び出せないメソッド
|すいません。違いがよく理解できません。 
|C++の protectedもメソッドが定義されているクラスかそのサブクラ
|スからしか呼び出せないように思いますが、私は何か勘違いしてます?
|さらにruby の private と protectedの違いはどこにあるのかも理解
|できません。

ちょっとややこしいですね.整理しましょう.

rubyのprivateは関数形式(レシーバを省略した形式)でしか呼び出
せないメソッドです.ということはselfに対してしか呼べないとい
うことで,結果的にそのクラスまたはサブクラスからしか呼ぶこと
が出来ません.

rubyのprotectedはselfがそのメソッドを定義したクラス(またはモ
ジュール)またはそのサブクラスである場所からしか呼べません.
こちらはレシーバを指定した形式でも呼び出せます.

つまり,privateは自分からしか見えないメソッドであるのに対し
て,protectedは一般の人からは見られたくないが,仲間(クラスが
同じオブジェクト)からは見えるメソッドです.

protectedは例えば2項演算子の実装にもう一方のオブジェクトの状
態を知る必要があるか調べる必要があるが,そのメソッドをpublic
にして,広く公開するのは避けたいというような時に使います.

C++の方はpublicもprotectedも同じクラスからは呼び出せます(そ
うらしい)ので,rubyのような区別はありません(よね).

                                まつもと ゆきひろ /:|)