面试题答案
一键面试实现思路
- 重写
protected
方法:在Ruby中,子类可以直接重写父类的protected
方法。protected
方法在类及其子类的实例之间可以互相调用。 - 调用父类的
private
方法:通常情况下,Ruby中private
方法不能通过显式的接收者调用。但可以通过在父类中定义一个中间的protected
或public
方法来间接调用private
方法。
可能遇到的问题
- 直接调用
private
方法:如果在子类中尝试直接调用父类的private
方法,例如super.private_method
,会引发NoMethodError
,因为private
方法不能使用显式的接收者(如super
)来调用。
解决方案
- 间接调用:在父类中定义一个
protected
或public
方法来调用private
方法。例如:
class Parent
def public_call_private
private_method
end
private
def private_method
puts "This is a private method"
end
end
class Child < Parent
protected
def protected_method
puts "This is a overridden protected method"
end
def call_protected_and_private
protected_method
public_call_private
end
end
child = Child.new
child.call_protected_and_private
在上述代码中,Parent
类定义了一个 public_call_private
方法,它调用了 private_method
。Child
类重写了 protected
方法,并在 call_protected_and_private
方法中调用了重写的 protected
方法和通过父类的 public_call_private
间接调用了父类的 private
方法。