Ruby初始化类时传递参数:子类Car继承Vehicle的传参实现
解决Car子类继承Vehicle时的初始化参数问题
嘿,这个问题其实是因为子类重写初始化方法时没正确调用父类的初始化逻辑导致的。咱们一步步来搞定它:
首先看你的代码,Car类重写了initialize方法,但这个方法既没有接收year参数,也没有调用父类Vehicle的initialize——这就导致父类里的@model_year根本没被初始化,自然调用get_model_year拿不到你传入的2000。
修正后的代码
只需要修改Car类的初始化方法,让它接收参数并调用父类的初始化逻辑:
class Vehicle def initialize(year) @model_year = year end def get_model_year() @model_year end end class Car < Vehicle def initialize(year) super(year) # 调用父类的initialize,传入年份参数,初始化@model_year @wheels = 4 # 初始化子类自己的属性 end def wheels @wheels end end
测试验证
现在你可以正常创建实例并获取预期结果了:
my_car = Car.new(2000) puts my_car.get_model_year # 输出 2000 puts my_car.wheels # 输出 4
关键说明
在Ruby的继承中,子类重写initialize后,父类的initialize不会自动执行。必须用super显式调用父类的初始化方法,才能让父类的属性被正确初始化。这里super(year)就是把传入的年份参数传递给父类的initialize,完成@model_year的赋值。
内容的提问来源于stack exchange,提问作者Armando N.
相关产品推荐
相关产品推荐

