我正在尝试在swift中学习继承和初始化的概念,并提出了以下代码。 “swift编程语言2.1”指出,如果子类提供其所有超类的指定初始化器的实现,则子类也会自动继承其所有超类便捷初始化器。
因此,子类“RecipeIngredient
”应该继承超类“Food
”的convenience init(){ self.init(name: "[unnamed]")
。但是这个特殊的方便init只初始化var name
,它如何初始化子类属性quantity
?有人可以向我解释一下,当我使用超类quantity
创建子类实例时,子类属性convenience init(){ self.init(name: "[unnamed]")
是如何初始化的?在此先感谢您的帮助!
class Food {
var name: String
init(name: String){
self.name = name
}
convenience init() {
self.init(name: "[unnamed]")
}
}
class RecipeIngredient: Food{
var quantity: Int
init(name: String, quantity: Int){
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String){
self.init(name: name, quantity: 1)
}
}
let ingredientOne = RecipeIngredient()
ingredientOne.name
ingredientOne.quantity
答案 0 :(得分:1)
执行时
let ingredientOne = RecipeIngredient()
方法Food.init()
运行,并调用self.init(name:String)
。 self
实际上是RecipeIngredient
的一个实例,因此您提供的此方法实际上是RecipeIngredient.init(name:String)
来初始化quantity
。
可以通过在每个print
例程中添加init
语句来确认这一点,以查看以哪种方式调用哪些方法。
如果我注释掉方法RecipeIngredient.init(name:String)
,编译器将不再让我写RecipeIngredient()
。