/**
13.4-派生类构造方法的两段式构造
*/
/**
两段式构造-构造过程可以划分为两个阶段
第一阶段,确保所有的存储属性都初始化完毕,
可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的赋值。
*/
class A {
var a: Int
init(a: Int) {
self.a = a
}
}
class B: A {
var b: Int
func testFun() -> Void {
print("testFun")
}
init(a: Int,b: Int) {
// 派生类引入的属性进行初始化
print("类B第一阶段初始化开始")
self.b = b
/** 第一阶段
*/
// testFun()
super.init(a: a)
print("第二阶段初始化开始")
if b > 100 {
self.a = 1000
}
testFun()
}
}
class C: B {
var c: Int
init(a: Int,b: Int,c: Int) {
类C第一阶段初始化开始")
self.c = c
super.init(a: a,b: b)
print("第二阶段初始化开始")
if c > 100 {
self.a = 1000
self.b = 1000
}
}
}
class D: C {
var d: Int
init(a: Int,c: Int,d: Int) {
类D第一阶段初始化开始")
self.d = d
super.init(a: a,b: b,c: c)
print("第二阶段初始化开始")
if d > 1000 {
self.a = 1000
self.b = 1000
self.c = 1000
}
}
}
var d = D.init(a: 0,b: 0,c: 0,d: 0)
/**
类D第一阶段初始化开始
类C第一阶段初始化开始
类B第一阶段初始化开始
类B第二阶段初始化开始
类C第二阶段初始化开始
类D第二阶段初始化开始
*/
/**
*/