/**
13.2-派生类的构造方法.mp4
*/
class AB {
var a: Int
var b: Int
// 指定构造方法,不允许出现构造器代理,self.init(...)
init(a: Int,b: Int) {
self.a = a
self.b = b
print("Class AB init!")
}
// 便利构造方法 一定是通过调用其它的构造方法来实现初始化 self.init
convenience init(a: Int) {
// self.a = a
// b = 0
self.init(a: a,b: 0)
}
convenience init(b: Int) {
// self.init(a: 2,b: 0)
self.init(a: 8)
}
}
class CD: AB {
var c: Int
var d: Int
// 指定构造器 Designated
// 构造方法默认不会被继承,基类的存储属性只能通过基类的构造方法来初始化
init(c: Int,d: Int) {
// 派生类的引入的存储属性要先被初始化,然后在调用父类的构造方法对父类的属性进行初始化
self.c = c
self.d = d
// 基类的存储属性
super.init(a: 0,b: 0)
// 只能调用基类的指定(Designated)构造方法来对基类的属性进行初始化,不能调用便利(Convenience)构造方法
// super.init(b: 0)
}
convenience init(a: Int,b: Int,c: Int,d:Int) {
self.init(c: c,d: d)
}
}