ruby

Ruby多态性怎样区分实例变量

小樊
83
2024-11-06 07:50:42
栏目: 编程语言

在Ruby中,多态性允许我们使用一个接口来表示不同类型的对象。要实现多态性,我们需要使用方法重写(method overriding)和模块(modules)。

要区分实例变量,我们可以使用instance_variable_getinstance_variable_set方法。这两个方法允许我们在运行时访问和修改实例变量,而不需要知道对象的具体类型。这里有一个简单的例子来说明如何使用这些方法区分实例变量:

class Animal
  def initialize(name)
    @name = name
  end
end

class Dog < Animal
  def initialize(name, breed)
    super(name)
    @breed = breed
  end
end

class Cat < Animal
  def initialize(name, color)
    super(name)
    @color = color
  end
end

def print_animal_info(animal)
  puts "Name: #{animal.instance_variable_get(:@name)}"
  puts "Breed: #{animal.instance_variable_get(:@breed)}" if animal.is_a?(Dog)
  puts "Color: #{animal.instance_variable_get(:@color)}" if animal.is_a?(Cat)
end

dog = Dog.new("Buddy", "Golden Retriever")
cat = Cat.new("Whiskers", "Black")

print_animal_info(dog)
print_animal_info(cat)

在这个例子中,我们定义了一个Animal基类,以及两个子类DogCat。每个子类都有自己的实例变量(@breed@color)。

print_animal_info方法接受一个Animal类型的参数。我们可以使用instance_variable_get方法来访问实例变量,而不需要知道对象的具体类型。我们还使用了is_a?方法来检查对象是否是DogCat类型的实例,以便在访问特定于子类的实例变量时进行条件判断。

0
看了该问题的人还看了