MST

星途 面试题库

面试题:Ruby中public、protected与private方法可见性的基础应用

在Ruby中定义一个类,类中有public、protected和private方法各一个,并说明在类外部如何调用这些方法,以及在子类中调用的规则。
20.2万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
class MyClass
  def public_method
    puts "这是一个public方法"
  end

  protected
  def protected_method
    puts "这是一个protected方法"
  end

  private
  def private_method
    puts "这是一个private方法"
  end
end

# 在类外部调用
obj = MyClass.new
obj.public_method # 可以直接调用public方法
# obj.protected_method # 报错,不能在类外部直接调用protected方法
# obj.private_method # 报错,不能在类外部直接调用private方法

class SubClass < MyClass
  def call_methods
    public_method # 子类可以调用父类的public方法
    protected_method # 子类可以在其内部调用父类的protected方法
    # private_method # 报错,子类不能在其内部调用父类的private方法
  end
end

sub_obj = SubClass.new
sub_obj.call_methods
sub_obj.public_method # 子类实例可以在外部调用从父类继承的public方法
# sub_obj.protected_method # 报错,子类实例不能在外部调用从父类继承的protected方法
  • 在类外部调用规则
    • public方法:可以通过类的实例直接调用。
    • protected方法:不能在类外部直接调用,即使是通过实例对象也不行。
    • private方法:同样不能在类外部直接调用,即使是通过实例对象也不行。
  • 在子类中调用规则
    • public方法:子类可以直接调用从父类继承的public方法,子类实例在外部也可以调用这些方法。
    • protected方法:子类可以在其内部调用从父类继承的protected方法,但子类实例不能在外部调用这些方法。
    • private方法:子类不能在其内部调用从父类继承的private方法,子类实例更不能在外部调用。