class Parent {
var a : Int
init(a : Int) {
self.a =a
}
convenience init() {
self.init(a : 10)
}
}
class Child : Parent {
var b : Int
override init(a : Int){
b = 10
super.init(a : a)
}
}
var child = Child() // i know that convenience initializer is inherited, but why??
child.a // 10
child.b // 10
我知道便利初始化器是继承的,但为什么? 我只是覆盖所有指定的初始化程序?那为什么需要呢?
答案 0 :(得分:3)
这是The Swift Programming Language:
中描述的规则规则2 如果您的子类提供了所有超类指定初始化器的实现 - 通过按照规则1继承它们,或者通过提供自定义实现作为其定义的一部分 - 那么它会自动继承所有超类便捷初始化器。
如果子类的客户端不想使用它们,那么继承便利初始化器不是 (就像继承方法和属性不需要 如果子类的客户端没有不要使用它们,但在我看来这是很自然的事情。
继承所有超类的API是子类的默认值,因此如果可能,也应继承便捷初始化器。由于方便初始值设定项需要调用兄弟指定的初始值设定项,因此只有在子类中重写了所有指定的初始值设定项时,编译器才能确保所有属性都能正确初始化。