在 Ruby 中,实现继承可以使用 class 关键字和 < 符号,如下所示:
class Animal
def speak
puts "I am an animal"
end
end
class Dog < Animal
def speak
puts "Woof!"
end
end
dog = Dog.new
dog.speak # 输出 "Woof!"
在上面的代码中,Dog 类继承自 Animal 类。Dog 类中的 speak 方法覆盖了 Animal 类中的同名方法。
实现多态可以使用方法重写和 super 关键字,如下所示:
class Animal
def speak
puts "I am an animal"
end
end
class Dog < Animal
def speak
puts "Woof!"
end
end
class Cat < Animal
def speak
puts "Meow!"
end
end
def make_speak(animal)
animal.speak
end
animal = Animal.new
dog = Dog.new
cat = Cat.new
make_speak(animal) # 输出 "I am an animal"
make_speak(dog) # 输出 "Woof!"
make_speak(cat) # 输出 "Meow!"
在上面的代码中,make_speak 方法接受一个参数 animal,并调用该参数的 speak 方法。由于 Dog 和 Cat 类都继承自 Animal 类并重写了 speak 方法,因此可以将它们的实例作为参数传递给 make_speak 方法,并实现多态。在 make_speak 方法内部,调用 animal.speak 方法时,实际上调用的是 Dog 或 Cat 类中的 speak 方法,而不是 Animal 类中的同名方法。 super 关键字可以在子类方法中调用父类同名方法,以实现在子类中扩展父类方法的功能。