Methods marked as private can only be called within the same object. They cannot be called with an explicit receiver, even if it's self.
Click to reveal answer
intermediate
What is the difference between protected and private methods in Ruby?
<strong>Protected</strong> methods can be called by any instance of the defining class or its subclasses, but only within the same family of objects. <strong>Private</strong> methods can only be called without an explicit receiver inside the same object.
Click to reveal answer
beginner
How do you declare a method as private in Ruby?
You can declare a method as private by placing it below the keyword private in the class, or by calling private :method_name.
Click to reveal answer
intermediate
Can a <strong>protected</strong> method be called from outside the class in Ruby?
No, <strong>protected</strong> methods cannot be called from outside the class or its subclasses unless the call is made between instances of the same class or subclass.
Click to reveal answer
intermediate
Why use protected methods instead of private methods?
Use <strong>protected</strong> when you want to allow access to methods between instances of the same class or subclasses, but keep them hidden from outside objects. <strong>Private</strong> is stricter and only allows calls within the same object.
Click to reveal answer
Which of the following is true about private methods in Ruby?
AThey can be called from subclasses with an explicit receiver.
BThey can be called from any object of the same class.
CThey can be called only without an explicit receiver inside the same object.
DThey can be called from outside the class with an explicit receiver.
✗ Incorrect
Private methods in Ruby can only be called without an explicit receiver inside the same object.
What keyword do you use to declare protected methods in Ruby?
Aprivate
Binternal
Cpublic
Dprotected
✗ Incorrect
The keyword protected is used to declare protected methods in Ruby.
Can a protected method be called by another instance of the same class?
AYes, protected methods can be called by other instances of the same class.
BNo, protected methods can only be called within the same instance.
CNo, protected methods are only accessible outside the class.
DYes, but only if called with an explicit receiver from outside the class.
✗ Incorrect
Protected methods allow access between instances of the same class or subclasses.
Which visibility level is the most restrictive in Ruby?
Aprotected
Bprivate
Cpublic
Dinternal
✗ Incorrect
Private methods are the most restrictive because they cannot be called with an explicit receiver, even within the same class.
If you want a method to be accessible only within the same object, which visibility should you use?
Aprivate
Bprotected
Cpublic
Dglobal
✗ Incorrect
Private methods are accessible only within the same object without an explicit receiver.
Explain the difference between protected and private visibility in Ruby with an example.
Think about who can call the methods and from where.
You got /4 concepts.
Describe a real-life situation where using protected methods would be better than private methods.
Consider a family or team where members share some secrets but keep others private.
You got /3 concepts.
Practice
(1/5)
1. Which statement best describes a private method in Ruby?
easy
A. It can be accessed from anywhere in the program.
B. It can only be called within the same object, not even by other instances of the same class.
C. It can be called by any object of the same class or its subclasses.
D. It is accessible only from outside the class.
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 B
Quick Check:
Private = same object only [OK]
Hint: Private = only inside same object, no other instances [OK]
Common Mistakes:
Thinking private methods can be called on other instances
Confusing private with protected visibility
Assuming private methods are accessible outside the class
2. Which of the following is the correct syntax to declare a private method in a Ruby class?
easy
A. private
def method_name
end
B. private def method_name; end
C. def private method_name; end
D. def method_name; private; end
Solution
Step 1: Recall Ruby private method syntax
In Ruby, you declare private methods by writing private on its own line, then defining the method below it.
Step 2: Check each option
private on its own line followed by def method_name
end is correct syntax. Putting private on the same line as def, prefixing def with private, or placing private inside the method are invalid.
Final Answer:
private
def method_name
end -> Option A
Quick Check:
private keyword on separate line before method [OK]
Hint: Use 'private' on its own line before method definition [OK]
Common Mistakes:
Trying to put 'private' inside method definition line
Using 'private def' which is invalid syntax
Placing 'private' after method definition
3. What will be the output of this Ruby code?
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)
medium
A. SyntaxError
B. NoMethodError: protected method `secret' called
C. protected info
D. nil
Solution
Step 1: Understand protected method access
Protected methods can be called by other instances of the same class. Here, p1 calls reveal_secret passing p2, and inside it calls other.secret.
Step 2: Predict output
Since secret is protected, p1 can call secret on p2. The method returns "protected info", which is printed.
Final Answer:
protected info -> Option C
Quick Check:
Protected allows calls between same class instances [OK]
Hint: Protected allows access between same class instances [OK]
Common Mistakes:
Thinking protected methods can't be called on other instances
Expecting NoMethodError for protected method call
Confusing protected with private access
4. Identify the error in this Ruby code:
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)
medium
A. NoMethodError: private method `sound' called for tiger
B. No error, outputs 'roar'
C. SyntaxError due to private method
D. ArgumentError in make_sound method
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
In make_sound, other.sound calls a private method on another instance, which is not allowed and raises NoMethodError.
Final Answer:
NoMethodError: private method `sound' called for tiger -> Option A
Quick Check:
Private methods can't be called on other instances [OK]
Hint: Private methods can't be called with explicit receiver [OK]
Common Mistakes:
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
5. You want to allow instances of a class to call a method on each other but keep it hidden from outside calls. Which visibility should you use and how would you implement it?
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)
hard
A. Use attr_accessor for password and keep it private.
B. Make password a private method; this code works as is.
C. Make password public; private and protected won't work.
D. Make password a protected method; private won't allow other.password call.
Solution
Step 1: Understand method visibility for inter-instance calls
Private methods cannot be called with an explicit receiver, so other.password will fail if password is private.
Step 2: Use protected visibility
Protected methods allow calls between instances of the same class, so changing password to protected allows other.password to work while keeping it hidden from outside.
Final Answer:
Make password a protected method; private won't allow other.password call. -> Option D
Quick Check:
Protected allows inter-instance calls, private does not [OK]
Hint: Use protected for inter-instance method access [OK]
Common Mistakes:
Keeping password private and expecting inter-instance calls to work
Making password public and exposing sensitive data
Using attr_accessor without protection
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.