来自子类

时间:2015-05-05 10:57:23

标签: ruby

假设我有两个班级:

class House
  def initialize(width, height)
      @width = width
      @height = height
  end
end

和:

class BrickHouse < House

end

当我创建一个房子时:

house = House.new(33,22)

如何从这个房子创建一个新的Brickhouse

我试过了:

 brickhouse = BrickHouse.new(house)

但那没有用!我错了什么?感谢

3 个答案:

答案 0 :(得分:1)

BrickHouse继承自House。这里的House类initialize方法需要两个参数,所以显然所有子类都需要两个参数。

如果你想为传递params(在父类中指定)的子类创建实例,只需使父类初始化params为可选,如下所示。

class House
  def initialize(height = 0, weight = 0)
    @height = height
    @weight = weight
  end
end

class BrickHouse < House
end

现在我们将能够使用init params为零创建子类的实例,

brick_house = BrickHouse.new

如果你传递初始化init参数的init params

brick_house = BrickHouse.new(10, 20)

答案 1 :(得分:1)

如果您的意思是要创建Brickhouse的实例,使其两个实例变量的值与house的值相同,则为:

Brickhouse.new(house.instance_variable_get(:@width),
  house.instance_variable_get(:@height)).

然而,此Brickhousehouse的实例完全不相关。

您也可以写:...instance_variable_get("@width")

答案 2 :(得分:0)

试试这个(当这些是getFeeStatement个对象时):

ActiveRecord

我认为应该这样做。即使house = House.new(33,22) brickhouse = BrickHouse.new(house.attributes) 可能非常复杂,House也应该继承这些方法,现在也应该继承它们的属性。