在Ruby中,多態性允許我們使用一個接口來表示不同類型的對象。要實現多態性,我們需要使用方法重寫(method overriding)和模塊(modules)。
要區分實例變量,我們可以使用instance_variable_get
和instance_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
基類,以及兩個子類Dog
和Cat
。每個子類都有自己的實例變量(@breed
和@color
)。
print_animal_info
方法接受一個Animal
類型的參數。我們可以使用instance_variable_get
方法來訪問實例變量,而不需要知道對象的具體類型。我們還使用了is_a?
方法來檢查對象是否是Dog
或Cat
類型的實例,以便在訪問特定于子類的實例變量時進行條件判斷。