在 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
关键字可以在子类方法中调用父类同名方法,以实现在子类中扩展父类方法的功能。