/**
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第二阶段初始化开始
*/
/**
*/
总结以上是内存溢出为你收集整理的13.4 Swift派生类构造方法的两段式构造全部内容,希望文章能够帮你解决13.4 Swift派生类构造方法的两段式构造所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)