13.4 Swift派生类构造方法的两段式构造

13.4 Swift派生类构造方法的两段式构造,第1张

概述        /**          13.4-派生类构造方法的两段式构造          */                  /**          两段式构造-构造过程可以划分为两个阶段          第一阶段,确保所有的存储属性都初始化完毕,          第二阶段,对父类中的存储属性做进一步的处理。          可以防止属性在被初始化之前访问,也可以防止属性被另外

/**

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派生类构造方法的两段式构造所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1068009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存