Ruby has 'protected' which is not Java-like protected, but implements "another instance can see my internals" semantics. It is useful for methods which take another instance as an argument like binary operators (e.g. `def ===(other)`) where you might need access to both objects internals.