Ruby类实例与继承
我想创建一个子类,在超类之外为子类添加属性。这就是我尝试过的: 第一版:Ruby类实例与继承,ruby,inheritance,Ruby,Inheritance,我想创建一个子类,在超类之外为子类添加属性。这就是我尝试过的: 第一版: 班级人员 属性读取器:名字、姓氏、年龄 def初始化(名字、姓氏、年龄) @first_name=first_name @姓氏=姓氏 @年龄=年龄 结束 结束 班级音乐人 属性读取器:名字、姓氏、年龄、仪器 def初始化(名字、姓氏、年龄、仪器) 超级的 @仪器 结束 结束 第二版 班级人员 ATTRS=[‘姓’、‘姓’、‘年龄’] def属性 属性 结束 结束 班级音乐人 属性=[“仪器”] def属性 超级+属性
班级人员
属性读取器:名字、姓氏、年龄
def初始化(名字、姓氏、年龄)
@first_name=first_name
@姓氏=姓氏
@年龄=年龄
结束
结束
班级音乐人
属性读取器:名字、姓氏、年龄、仪器
def初始化(名字、姓氏、年龄、仪器)
超级的
@仪器
结束
结束
第二版
班级人员
ATTRS=[‘姓’、‘姓’、‘年龄’]
def属性
属性
结束
结束
班级音乐人
属性=[“仪器”]
def属性
超级+属性
结束
结束
这两种方法都不管用 在版本1中尝试
class Musician < Person
attr_reader :instrument
def initialize(first_name, last_name, age, instrument)
# Pass arguments to the super class' constructor!
super first_name, last_name, age
@instrument = instrument
end
end
class音乐家
多亏了
attr\u reader:first\u name、:last\u name、:age
inPerson
music
中的这三个访问器将因继承而可用。将来,您能给出错误消息,而不是说“它不起作用”吗?
class Person
ATTRS = ['first_name', 'last_name', 'age']
def attributes
ATTRS
end
end
class Musician < Person
ATTRS = ['instrument']
def attributes
super + ATTRS
end
end
class Musician < Person
attr_reader :instrument
def initialize(first_name, last_name, age, instrument)
# Pass arguments to the super class' constructor!
super first_name, last_name, age
@instrument = instrument
end
end