构造函数继承条件:
1、子类如果没有定义任何得designated构造器,它会自动继承父类得所有 designated 构造器;
那么在子类中只定义一个便利构造器依然可以通过 self.init 调用继承过来的指定构造方法(如果类定义了一个不可选类型的属性或者没有初始值let常量属性,那么类中至少要定义一个指定构造函数)
2、如果子类实现了父类所有的 designated 构造器,,无论它是继承还是手动编写得,那么它都会自动继承父类所有的convenience 构造器
构造函数之间调用规则:
1、指定构造器必须直接调用父类指定构造器
2、便利构造器函数必须调用同一类中定义得其他构造器函数
3、便利构造器最终必须以调用指定构造器函数结束
构造函数安全检查:
1、指定构造函数必须保证其所在得类的全部存储属性初始化完成,才能向上调用父类构造函数(可选类型除外,因为可选类型本身就允许为 nil)
2、指定构造函数必须先调用父类构造函数代理,才能去设置继承的属性值;否则设置得值会被父类得初始化方法覆盖,
3、便利构造函数必须先调用同一类得构造函数,才能去get、set属性值,否则也会被覆盖,而且编译不会通过
4、构造函数在初始化完成之前,不能调用实例方法,不能get属性值。因为这时还不能知道属性是否已经被初始化。