Ruby и Java не относятся к «частному» свойству одинаково. В Ruby, если вы помечаете что-то как личное, это означает, что это не может быть вызвано с получателем, т.е.
class Sub
private
def foo; end
end
sub.foo => error accessing private method with caller
но вы всегда можете получить к нему доступ, если вы измените, кто себя такой, как:
sub.instance_eval { foo } #instance_eval changes self to receiver, 'sub' in this example
Вывод: не надейтесь, что вы можете спрятать или защитить что-то из космоса! Или с большой силой приходит большая ответственность!
EDIT:
Да, я знаю, вопрос был для полей, но это то же самое. Вы всегда можете сделать:
sub.instance_eval { @my_private_field = 'something else' }
puts sub.instance_eval { @my_private_field }