praivate
class内でprivateメソッドを定義されたメソッドはレシーバを指定して呼び出すことができなくなります。
class Fooz
private
def say
p "Hello"
end
end
foo = Foo.new
foo.say
この場合はエラーが発生します。
次の場合はエラーが発生せずに実行が可能です。
class Foo
def greeting
say
end
private
def say
p "Hello"
end
end
foo = Foo.new
foo.greeting
privateメソッド内で定義されたsayメソッドは、クラス内で呼び出すことで、インスタンスで使用することが可能となります。
protectedメソッド
privateメソッドと同じようにクラスの外から直接メソッドを呼び出すことができなくなります。
同じインスタンス内で呼び出すことができます。
ここまではprivateメソッドと同じですが、この機能に加えて他のインスタンスでも同じクラスやサブクラスのメソッドであれば呼び出すことが可能となります。
同じクラスのオブジェクト同士ではprotectedメソッドで定義されたオブジェクトを共有できることができるので、情報のやり取りが円滑にできることがあります。
ただし、protectedメソッドは特殊なメソッドであることも覚えておきましょう。