好的,所以我在這裏搜索了一個關於這個問題的答案,並且找不到我以後的(確切的說),所以我會稍微貪婪並要求一些社區時間。我希望儘可能提出我的問題。因此,在上下文中,我一直在努力應對上週的類,類變量和方法的想法,但在過去的兩天裏,我的理解已經取得了重大進展。但是現在我面臨着繼承問題,無法解決爲什麼只有在不使用超級繼承的情況下才能使用super。爲什麼我可以在沒有它的情況下繼承使用超級紅寶石?
例如:
class Animal
def initialize (type, breed, age)
@type = type
@breed = breed
@age = age
end
end
class Dog < Animal
end
class Cat < Animal
end
class Fish
end
woof = Dog.new("dog", "shitzu", 12)
meow = Cat.new("cat", "tabby", 5)
fish = Fish.new("fish", "gold", 2)
Output:
=> #<Dog:0x00000001447680 @type="dog", @breed="shitzu", @age=12>
=> #<Cat:0x0000000140c918 @type="cat", @breed="tabby", @age=5>
ArgumentError: wrong number of arguments (given 3, expected 0)
正如你所看到的,我已經能夠從動物繼承在我的兩個狗和貓類,這標誌着我繼承,但在我的魚我一直沒能到,因爲我沒有繼承。
如果有人可以解釋爲什麼我們使用超級,並指出我的理解缺陷,我會非常感激,我明白,我可能完全誤解了這裏的用法,但我想澄清它。感謝您的時間,感謝您的幫助。
ty。
你想知道顯式調用'super'? (比如,當一個方法調用'super'來運行它的父類的方法版本時)? – gmcnaughton
如果你想自定義'Dog'類的'initialize'方法,只需繼承'Animal'類就不會讓你自定義它。如果在'Dog'類中,你做了類似'def初始化(類型,品種,年齡,顏色)',然後有'super(type,breed,age)'和'@color = color',這將允許你改變你繼承的initialize方法,而'super'調用它的父類'Animal'來初始化你有的其他實例變量 –
你是否在示例中使用'super'?我不明白這個問題是如何與代碼示例相關的。 –