在 Ruby 中,继承是通过 class 关键字和 < 符号来实现的。子类可以使用父类的属性和方法,同时还可以添加自己的属性和方法。以下是一个继承的简单示例:
class Animal
def speak
puts "I am an animal"
end
end
class Dog < Animal
def speak
puts "I am a dog"
end
end
my_dog = Dog.new
my_dog.speak # 输出 "I am a dog"
在这个示例中,Dog 类继承了 Animal 类,并重写了 speak 方法以添加自己的行为。
多态是通过方法重写和方法重载实现的。方法重写是指子类重写父类的方法,以实现自己的行为。方法重载是指在同一个类中定义多个同名的方法,但是参数类型或数量不同,以实现不同的行为。以下是一个多态的简单示例:
class Animal
def speak
puts "I am an animal"
end
end
class Dog < Animal
def speak
puts "I am a dog"
end
end
class Cat < Animal
def speak
puts "I am a cat"
end
end
def make_speak(animal)
animal.speak
end
my_dog = Dog.new
my_cat = Cat.new
make_speak(my_dog) # 输出 "I am a dog"
make_speak(my_cat) # 输出 "I am a cat"
在这个示例中,make_speak 方法接受一个 Animal 类型的参数,并调用其 speak 方法。由于 Dog 和 Cat 都继承自 Animal,因此它们都可以作为参数传递给 make_speak 方法。在每个子类中,speak 方法被重写以实现自己的行为。在调用 make_speak 方法时,根据传递的参数类型的不同,会调用不同的子类中的 speak 方法,从而实现了多态。