Rubyでは、C++やJavaのprivateと異なり、サブクラスからでもスーパークラスのprivateメソッドを呼ぶことができる。
Rubyにおけるprotectedとprivateの違いは、レシーバが付けられるかどうかであり、サブクラスから呼べるかどうかではない。
privateメソッドにはレシーバを付けられないので、同じクラスの別のインスタンスのprivateメソッドは呼べない。このような場合にprotectedを使用する。
protectedメソッドは、そのメソッドを持つオブジェクトもメソッド定義式内でなければ呼び出せない。
クラス/メソッドの定義 - Rubyリファレンスマニュアル