Protected and private visibility help control who can use certain parts of your code. This keeps your program safe and organized.
Protected and private visibility in Ruby
class ClassName private def private_method # code end protected def protected_method # code end end
private methods can only be called inside the same object.
protected methods can be called by any instance of the same class or subclasses.
secret is private and can only be used inside the Person object.class Person private def secret "My secret" end end
age is protected and can be called by other Person objects.class Person protected def age 30 end end
age is used to compare ages between two Person objects.class Person def compare_age(other) if other.age > 20 "Older" else "Younger" end end protected def age 25 end end
This program shows how protected and private methods work. The age method is protected so one person can compare ages with another. The secret method is private and cannot be called outside the object.
class Person def initialize(name, age) @name = name @age = age end def older_than?(other) other.age < @age end protected def age @age end private def secret "My secret info" end end person1 = Person.new("Alice", 30) person2 = Person.new("Bob", 25) puts person1.older_than?(person2) # true # puts person1.secret # This would cause an error because secret is private
Trying to call a private method from outside the object will cause an error.
Protected methods allow access between objects of the same class, but not from outside.
Use private for methods only used inside the object, and protected when you want limited sharing.
Private methods are only accessible inside the same object.
Protected methods can be accessed by other objects of the same class or subclasses.
These visibility controls help keep your code safe and organized.
Practice
private method in Ruby?Solution
Step 1: Understand private method access
Private methods in Ruby are only accessible within the same object, meaning you cannot call them on other instances, even if they belong to the same class.Step 2: Compare with other visibility levels
Protected methods allow access from other instances of the same class or subclasses, but private methods do not.Final Answer:
It can only be called within the same object, not even by other instances of the same class. -> Option BQuick Check:
Private = same object only [OK]
- Thinking private methods can be called on other instances
- Confusing private with protected visibility
- Assuming private methods are accessible outside the class
Solution
Step 1: Recall Ruby private method syntax
In Ruby, you declare private methods by writingprivateon its own line, then defining the method below it.Step 2: Check each option
privateon its own line followed bydef method_name endis correct syntax. Puttingprivateon the same line asdef, prefixingdefwithprivate, or placingprivateinside the method are invalid.Final Answer:
private def method_name end -> Option AQuick Check:
private keyword on separate line before method [OK]
- Trying to put 'private' inside method definition line
- Using 'private def' which is invalid syntax
- Placing 'private' after method definition
class Person
protected
def secret
"protected info"
end
public
def reveal_secret(other)
other.secret
end
end
p1 = Person.new
p2 = Person.new
puts p1.reveal_secret(p2)Solution
Step 1: Understand protected method access
Protected methods can be called by other instances of the same class. Here,p1callsreveal_secretpassingp2, and inside it callsother.secret.Step 2: Predict output
Sincesecretis protected,p1can callsecretonp2. The method returns "protected info", which is printed.Final Answer:
protected info -> Option CQuick Check:
Protected allows calls between same class instances [OK]
- Thinking protected methods can't be called on other instances
- Expecting NoMethodError for protected method call
- Confusing protected with private access
class Animal
private
def sound
"roar"
end
def make_sound(other)
other.sound
end
end
lion = Animal.new
tiger = Animal.new
puts lion.make_sound(tiger)Solution
Step 1: Understand private method restrictions
Private methods cannot be called with an explicit receiver, even if the receiver is an instance of the same class.Step 2: Analyze the method call
Inmake_sound,other.soundcalls a private method on another instance, which is not allowed and raises NoMethodError.Final Answer:
NoMethodError: private method `sound' called for tiger -> Option AQuick Check:
Private methods can't be called on other instances [OK]
- Assuming private methods can be called on other instances
- Confusing private and protected method rules
- Expecting no error when calling private method on other object
class User
# Your code here
def compare_password(other)
self.password == other.password
end
private
def password
"secret123"
end
end
u1 = User.new
u2 = User.new
puts u1.compare_password(u2)Solution
Step 1: Understand method visibility for inter-instance calls
Private methods cannot be called with an explicit receiver, soother.passwordwill fail ifpasswordis private.Step 2: Use protected visibility
Protected methods allow calls between instances of the same class, so changingpasswordto protected allowsother.passwordto work while keeping it hidden from outside.Final Answer:
Makepassworda protected method; private won't allowother.passwordcall. -> Option DQuick Check:
Protected allows inter-instance calls, private does not [OK]
- Keeping password private and expecting inter-instance calls to work
- Making password public and exposing sensitive data
- Using attr_accessor without protection
Ready to prove it?
Pass the test and this pattern moves unknown
