rubyのprivate、protectedについて誤解していた。
rubyのprivate、protectedについて、かなり誤解していたことに気付いた。
private とは
明示的なレシーバを付けて呼び出す事はできない。
つまり、他のオブジェクトから呼び出すことはできず、
自オブジェクトからのみ呼び出す事ができる。
継承を行っている場合、
継承元に定義されたprivateメソッドは、継承先から呼び出す事ができる。
呼び出すときに、明示的にレシーバを指定する必要がないからだ。
これって、Javaでいうprotectedに相当するのでは。
じゃあ、rubyのprotectedは?
privateとほぼ同じだが、
同一クラスまたはサブクラスのインスタンスからであれば、レシーバを指定して呼び出す事ができる。 ちょっとirbで試してみると、
>> class Test >> protected >> def test; puts 'test'; end >> end => nil >> class SubTest < Test >> def subtest1; test; end >> def subtest2(o) o.test; end >> end => nil >> st = SubTest::new => #<SubTest:0x101220a40> >> st.subtest1 test => nil >> st.subtest2(Test::new) test => nil >> st.test NoMethodError: protected method `test' called for #<SubTest:0x101220a40> from (irb):13
なるほど。
そうすると、Javaでいうprivateのような狭いスコープは無いということか。