我一直在做一些搜索,但我不太明白继承和实例化之间的区别。
对我来说两者似乎都是一样的,我无法弄清楚在什么情况下使用哪一个。
答案 0 :(得分:1)
继承是指类可以从其他类导入行为的方式,例如:
class Mammal
def walk
end
end
class Bat < Mammal
def fly
end
end
蝙蝠是哺乳动物,但反之亦然。鉴于上面的例子,蝙蝠可以飞和行走,但哺乳动物只能走路。
即时化是指创建一个类的实例,例如
b = Bat.new
在上面的示例中,b
是Bat的实例。实例化对象可以在其类中执行任何定义为实例方法的方法,并可以创建实例变量来表示状态:
def set_wing_count
@wings = 2
end
这两个概念完全不同。
答案 1 :(得分:0)
就对象和类而言,你可以这样想。让我们说你已经创建了一个玩具蓝图,它有两个轮子和一个手柄
class Toy
@wheels
@handle
def initialize(wheels, handle)
@whees = wheels
@color = handle
end
def start
puts "Vroom"
end
end
然后我看到你的设计,我喜欢它,但我想扩展它包括闪光灯。我可以制作出与你完全一样的蓝图:
class FlashyToy
@whees
@handle
@flashyLight
end
但这将是一种浪费,所以我可以继承你的设计中的轮子和手柄,只需添加新的灯光:
class FlashyToy < Toy
@flashyLight
end
FlashyToy仍有轮子和手柄,即使我没有明确定义它们,因为属性是玩具类的继承。
实例化是您将实际副本作为蓝图的地方。换句话说,如果我制作一个真正的FlashyToy,或者如果我制作一个玩具,那么我已经实例化了这个类
toy1 = Toy.new(2, 1)
toy2 = FlashyToy.new(3, 2)
toy1.start #print Vroom
toy2.start #print Vroom even though not directly defined in flashy toy