【发布时间】:2017-02-03 04:48:00
【问题描述】:
好的,所以我在这里搜索了这个问题的答案,但找不到我所追求的(确切地说),所以我会有点贪婪,并要求一些社区时间。我希望使我的问题尽可能适用。
因此,在某些情况下,上周我一直在为类、类变量和方法的想法而苦苦挣扎,但在过去的两天里,我的理解取得了重大进展。但是现在我面临着继承,无法弄清楚为什么当我可以不使用它就继承时使用 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)
如您所见,我已经能够在我标记为继承的 Dog 和 Cat 类上从 Animal 继承,但在我的 Fish 上却不能,因为我没有继承。
如果有人能解释我们为什么使用 super,并指出我理解中的缺陷,我将不胜感激,我知道我可能完全误解了这里的用法,但我想澄清一下。感谢您的宝贵时间,感谢您的帮助。
ty.
【问题讨论】:
-
您想知道对
super的显式调用吗? (比如,当一个方法调用“super”来运行其父类的方法版本时?) -
如果你想自定义
Dog类中的initialize方法,简单地从类Animal继承不会让你自定义它。如果在Dog类中,您做了类似def initialize(type, breed, age, color)的操作,然后有super(type, breed, age)和@color = color,这将允许您更改在super调用其父类Animal时继承的初始化方法初始化您拥有的其他实例变量 -
您的意思是在示例中使用
super吗?我不明白这个问题与代码示例有什么关系。 -
@gmcnaughton 和 philip yoo(对不起,我不能在同一评论中同时标记两者)解释了它。抱歉这个愚蠢的问题,我刚刚做了一些不同的在线课程,它似乎被添加到这里和那里,但我不知道应该什么时候使用它
-
@JoshuaCheek 好吧,这是我的一半问题,公平地说我不知道,我有点问 super 是如何应用的,我认为它与初始化方法有关。
标签: ruby class inheritance initialization super