Rule 1
如果您的子类没有定义任何指定初始值设定项,它将自动继承其超类的所有指定初始值设定项。
困惑:我在子类中提供了一个指定的初始值设定项。这意味着超类指定的初始化器不会归结为子类。但我还是需要写override关键字提供子类中任何超类指定初始化程序的实现(这意味着超类指定的 init 归结为子类)。规则 1 规定,如果我提供了子类指定的初始值设定项,那么指定的超类将不会出现。 (只有当我们没有为子类提供任何指定的 init 时,覆盖才有意义。)
class Food{
var name : String
init(foodName :String) {
self.name = foodName
}
}
class RecipieIngredient : Food{
var quantity : Int
init(fName :String, quantity :Int) {
self.quantity = quantity
super.init(foodName: fName)
}
override convenience init (foodName :String){
self.init(fName: foodName, quantity: 1)
}
}
这是因为 init() 不是受保护的方法。因此,如果您在子类中定义 init() 方法,编译器不知道您是指超类的 init() 方法,还是子类的 init() 方法。 “覆盖”清除了这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)