推荐答案
在 Ruby 中,public、private 和 protected 是用于控制方法访问权限的关键字。它们的区别如下:
- public: 默认情况下,所有方法都是
public的。这意味着这些方法可以在任何地方被调用,无论是类内部还是外部。 - private:
private方法只能在类内部被调用,且不能通过显式的接收者调用。它们只能通过隐式的self调用。 - protected:
protected方法可以在类内部或子类中被调用,且可以通过显式的接收者调用,但接收者必须是同一个类或其子类的实例。
本题详细解读
public 方法
public 方法是 Ruby 中默认的访问级别。任何对象都可以调用 public 方法,无论是在类内部还是外部。例如:
class MyClass
def public_method
puts "This is a public method"
end
end
obj = MyClass.new
obj.public_method # 输出: This is a public methodprivate 方法
private 方法只能在类内部被调用,且不能通过显式的接收者调用。它们通常用于实现类的内部逻辑,而不希望外部直接访问。例如:
// www.javascriptcn.com code example
class MyClass
def public_method
puts "This is a public method"
private_method
end
private
def private_method
puts "This is a private method"
end
end
obj = MyClass.new
obj.public_method # 输出: This is a public method
# This is a private method
obj.private_method # 报错: private method `private_method' calledprotected 方法
protected 方法可以在类内部或子类中被调用,且可以通过显式的接收者调用,但接收者必须是同一个类或其子类的实例。protected 方法通常用于在类或子类之间共享方法,而不希望外部直接访问。例如:
// www.javascriptcn.com code example
class MyClass
def public_method(other)
puts "This is a public method"
other.protected_method
end
protected
def protected_method
puts "This is a protected method"
end
end
class SubClass < MyClass
def call_protected_method(other)
other.protected_method
end
end
obj1 = MyClass.new
obj2 = MyClass.new
obj1.public_method(obj2) # 输出: This is a public method
# This is a protected method
sub_obj = SubClass.new
sub_obj.call_protected_method(obj1) # 输出: This is a protected method通过以上示例,可以清楚地看到 public、private 和 protected 方法在 Ruby 中的区别和使用场景。