继承和实例化有什么区别?

时间:2017-06-15 01:52:56

标签: ruby-on-rails

我一直在做一些搜索,但我不太明白继承和实例化之间的区别。

对我来说两者似乎都是一样的,我无法弄清楚在什么情况下使用哪一个。

2 个答案:

答案 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