13.4 Swift派生类构造方法的两段式构造
/** 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
/** 第一阶段 (1)不可以访问父类中的属性 (2)不可以调用成员方法 */ // 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第二阶段初始化开始 */ /** */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |