知识卡片
初始化方法默认不被子类继承
内容
作为[[继承是类独有的能力]]之外的一处例外,Swift的类默认不会把父类的初始化方法继承给子类,即使子类什么初始化方法都没写——这是刻意的:子类往往会新增属性,如果直接继承父类的初始化方法,很容易漏掉给新属性赋值,造成实例带着未初始化字段就被用起来。只有当子类给所有新增属性都提供了默认值、且没有自定义任何指定初始化方法时,才会自动继承父类的指定初始化方法(连带继承父类的所有便捷初始化方法)——这时才能保证继承来的初始化方法依然足以让子类实例完全就绪。需要强制子类必须实现某个特定初始化方法时,父类可以用required标记该方法,子类即使不加override也必须给出自己的实现,这是[[switch枚举全覆盖的面向未来设计]]同一条”用编译器代替人工检查完整性”思路在继承体系上的应用。
参考来源
《Swift编程权威指南》第17章《初始化》