/**
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第二阶段初始化开始
*/
/**
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。