今更聞けない private と protected の違い
を調べてみる
privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、レシーバー形式では呼び出せないようにするという意味です。したがって、可視性がprivateなメソッドは、自クラス及びサブクラスからしか参照できません。
protectedも同様に、自クラス及びサブクラスからしか参照できませんが、関数形式でもレシーバー形式でも呼び出せます。
メソッドのカプセル化に必要な機能です。
privateとprotectedの違いが分かりません
Java 脳からするとかなり違和感を感じる。Ruby では private メソッドも継承したクラスから使えちゃう。
class Hello private def hello puts "hello world" end end class Hello2 < Hello def say hello end end Hello2.new.say #=> hello world
private は外から呼べないメソッド
class Hello private def hello puts "hello world" end end Hello.new.hello #=> private method `hello' called for #<Hello:0x100317a8> (NoMethodError)
でも、protected は外からも呼べるメソッド。ただし、自クラス及びサブクラスからのみ。
class Hello protected def hello puts "hello world" end end class Hello2 < Hello def say Hello.new.hello end end Hello2.new.say #=> hello world
ただし、使い処がわからない・・・。