MST

星途 面试题库

面试题:Ruby中类继承如何实现属性和方法的访问控制

在Ruby类继承体系下,假设存在一个父类`Animal`和子类`Dog`,`Animal`中有属性`@name`和方法`speak`,请阐述如何通过访问控制修饰符来确保`Dog`类对`@name`和`speak`方法有合适的访问权限,比如`Dog`类只能读取`@name`,但能修改`speak`方法的行为,给出具体的代码示例。
44.1万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
class Animal
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def speak
    puts "#{@name} makes a sound."
  end
end

class Dog < Animal
  def speak
    puts "#{@name} barks."
  end
end

# 使用示例
dog = Dog.new("Buddy")
puts dog.name  # 读取name属性
dog.speak       # 调用修改后的speak方法

在上述代码中:

  • Animal类中,使用attr_reader :name定义了只读属性@name,这样Dog类只能读取@name属性。
  • Animal类的speak方法被子类Dog重写,从而修改了speak方法的行为。