规则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)
}
}
答案 0 :(得分:-2)
因为init()不是受保护的方法。因此,如果在子类中定义init()方法,编译器不会知道您是指超类的init()方法还是子类。 '倍率'清除它。