まつもと ゆきひろです
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のような区別はありません(よね).
まつもと ゆきひろ /:|)